我在Lists和ListItems之间有多对多关联:List知道它的Items,但是ListItem不知道包含列表。级联是saveupdate。
因此,每当我尝试删除ListItem实体时,我都会得到一个SQLException,说我打破了参照完整性。 NHibernate尝试删除我的ListItem而不删除链接表中的相应行。问题是,是否有可能指示NHibernate删除我的ListItem而不破坏参照完整性?
如果我必须从所有包含列表中手动删除该项目,我该如何正确地执行此操作?
非常感谢任何建议。
乌鲁
答案 0 :(得分:0)
您需要将孩子的映射设置为inverse=true
。来自another thread:
当您调用SaveOrUpdate NHibernate时 首先删除所有孩子 对象。然后,因为都没有 关系标记为反向, NHibernate也试图设置 子表中的外键列 为空。因为行已经存在 被删除,你收到第二个 错误。你需要设置inverse = true 你们关系中的一方需要解决 这个。这通常是在一个上完成的 (主键或父键)方。如果你 不要这样做,NHibernate会做的 每一方的适当更新 关系。
public class StoreMap : ClassMap<Store>
{
public StoreMap()
{
Id(x => x.Id);
Map(x => x.Name);
HasMany(x => x.Staff)
.Inverse() // Magic code!
.Cascade.All();
}
}