I’ve got to classes Product and Store which have many to many relation
I want deleting of store not to cause deleting of related product
And deleting of product not to cause deleting of related store.
Currently deleting of entity cause exception due to Foreign Key constraint.
Here is this classes and their mapping in fluent hibernate:
public class Product
{
public Product()
{
this.StoresStockedIn = new List<Store>();
}
public virtual string Name { get; set; }
public virtual double Price { get; set; }
public virtual long ProductID { get; set; }
public virtual IList<Store> StoresStockedIn { get; set; }
}
public class Store
{
public Store()
{
this.Products = new List<Product>();
this.Staff = new List<Employee>();
}
public virtual string Name { get; set; }
public virtual IList<Product> Products { get; set; }
public virtual IList<Employee> Staff { get; set; }
public virtual long StoreID { get; set; }
}
public class ProductMap : ClassMap<Product>
{
public ProductMap()
{
this.Id(x => x.ProductID);
this.Map(x => x.Name);
this.Map(x => x.Price);
this.HasManyToMany(x => x.StoresStockedIn)
.Cascade.None()
.Table("StoreProduct");
}
public class StoreMap : ClassMap<Store>
{
public StoreMap()
{
this.Id(x => x.StoreID);
this.Map(x => x.Name);
this.HasManyToMany(x => x.Products)
.Cascade.None()
.Inverse()
.Table("StoreProduct");
this.HasMany(x => x.Staff)
.Cascade.All()
.Inverse();
}
}
Thanks,
Alexey Zakharov
if you choose to set the Cascade parameter at NONE, it’s up to you to manage this relation and so to put the store property value in the product to null before deleting the store. Like Karl said often you come with another class (association class) to hold additionnal information about the relation.