Nhibernate 多对多关系中的删除操作问题
我要学习产品和商店的多对多关系 我希望删除存储不会导致删除相关产品 以及删除产品不会导致删除相关存储 由于外键约束,当前删除实体导致异常 以下是fluent hibernate中的这些类及其映射:Nhibernate 多对多关系中的删除操作问题,nhibernate,fluent-nhibernate,nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,我要学习产品和商店的多对多关系 我希望删除存储不会导致删除相关产品 以及删除产品不会导致删除相关存储 由于外键约束,当前删除实体导致异常 以下是fluent hibernate中的这些类及其映射: public class Product { public Product() { this.StoresStockedIn = new List<Store>(); } public virtual string Name { get;
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();
}
}
谢谢,
亚历克赛·扎哈罗夫(Alexey Zakharov)将Hibernate从混合模式中解放出来,从数据库中思考 在透视图中,您的产品实体似乎保留了自己的列表 它储存在许多商店里。我建议把这些信息分开 所以你有一个叫做产品商店的协会实体 将产品与不同的商店关联。例如: 产品名称,id 存储ID、名称、地址 ProductStoreproduct\u id、Store\u id、Store\u中的数量 这应该解决您描述的问题类型 记住业务规则:如果商店被删除,我怀疑 商店里的产品需要记账等等
K如果选择将Cascade参数设置为NONE,则由您管理此关系,从而在删除存储之前将产品中的存储属性值设置为null。就像Karl经常说的,你带着另一个类关联类来保存关于关系的附加信息