【发布时间】:2010-11-30 19:52:58
【问题描述】:
我有以下架构,当我删除一侧的对象之一时,它似乎试图删除另一侧的对象。我对使用正确的 Cascade 选项感到有些困惑,而且我认为 Oren 对它们的简短描述没有用,所以请不要引用它们。
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 的 Store 时,NHIbernate 似乎不仅尝试删除 StoreProducts,还尝试删除 Products。
这是我的约定:
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.:我不想用代码压倒人们,但如果需要可以发布更多内容。
【问题讨论】: