我有以下架构,并且当我删除在许多方面的对象之一时,它似乎试图删除其他许多方面的对象。我对使用恰当的Cascade选项有些困惑,并且我没有发现Oren对它们的简要描述是有用的,所以请不要引用它们。流利的NHibernate与ManyToMany和自定义链接表
public class Store {
public virtual IList<StoreProduct> StoreProducts { get; set; }
}
public class Product {
public virtual IList<StoreProduct> StoreProducts { get; set; }
}
public class StoreProduct {
public virtual Store Store { get; set; }
public virtual Product Product { get; set; }
public virtual Decimal Cost { get; set; } //this is why I have a custom linking class
}
在我的映射覆盖,我有:
对于存储:
mapping.HasMany(x => x.StoreProducts).Cascade.AllDeleteOrphan().Inverse;
对于产品:
mapping.HasMany(x => x.StoreProducts).Cascade.AllDeleteOrphan().Inverse;
当我尝试删除已关联StoreProducts一个商店,似乎NHIbernate不仅试图删除StoreProducts,而且删除产品。
这里是我的约定:
return c =>
{
c.Add<ForeignKeyConvention>();
c.Add<HasManyConvention>();
c.Add<HasManyToManyConvention>();
c.Add<ManyToManyTableNameConvention>();
c.Add<PrimaryKeyConvention>();
c.Add<ReferenceConvention>();
c.Add<EnumConvention>();
c.Add<TableNameConvention>();
c.Add<CascadeAll>();
c.Add(DefaultCascade.All());
};
HasManyConvention:
public void Apply(IOneToManyCollectionInstance instance)
{
instance.Key.Column(instance.EntityType.Name + "Fk");
instance.Cascade.AllDeleteOrphan();
instance.Inverse();
}
我在做什么错?
谢谢!
p.s .:我不想用代码压倒人们,但可以在需要时发布更多内容。