我有以下架構,並且當我刪除在許多方面的對象之一時,它似乎試圖刪除其他許多方面的對象。我對使用恰當的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 .:我不想用代碼壓倒人們,但可以在需要時發佈更多內容。