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

时间:2009-08-22 15:10:38

标签: nhibernate fluent-nhibernate nhibernate-mapping

我必须使用具有多对多关系的产品和商店课程

我想要删除商店不要删除相关商品 并且删除产品不会导致相关商店的删除。

目前因外键约束而删除实体导致异常。

以下是这些类及其在流畅的休眠方式中的映射:

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

2 个答案:

答案 0 :(得分:0)

将Hibernate从混合中解放出来,只是从数据库中思考 看来,您的产品实体似乎保留了自己的列表 它存放的商店。我建议分离出这些信息 所以你有一个称为产品商店的关联权利 将产品与不同的商店联系起来。例如:

产品(名称,ID) 商店(身份证,姓名,地址)

ProductStore(product_id,Store_id,quantity_in_store ....)。

这应该解决您描述的问题。

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

ķ

答案 1 :(得分:0)

如果您选择将Cascade参数设置为NONE,则由您来管理此关系,因此在删除商店之前将产​​品中的store属性值设置为null。就像卡尔经常说的那样,你会来另一个类(关联类)来保存关于关系的额外信息。