Nhibernate 多对多关系中的删除操作问题

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;

我要学习产品和商店的多对多关系

我希望删除存储不会导致删除相关产品 以及删除产品不会导致删除相关存储

由于外键约束,当前删除实体导致异常

以下是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();
    }
}
谢谢,
亚历克赛·扎哈罗夫(Alexey Zakharov)

将Hibernate从混合模式中解放出来,从数据库中思考 在透视图中,您的产品实体似乎保留了自己的列表 它储存在许多商店里。我建议把这些信息分开 所以你有一个叫做产品商店的协会实体 将产品与不同的商店关联。例如:

产品名称,id 存储ID、名称、地址

ProductStoreproduct\u id、Store\u id、Store\u中的数量

这应该解决您描述的问题类型

记住业务规则:如果商店被删除,我怀疑 商店里的产品需要记账等等


K

如果选择将Cascade参数设置为NONE,则由您管理此关系,从而在删除存储之前将产品中的存储属性值设置为null。就像Karl经常说的,你带着另一个类关联类来保存关于关系的附加信息