NHibernate多对多并删除一个项目

时间:2010-09-18 16:35:20

标签: nhibernate many-to-many cascading-deletes

我在Lists和ListItems之间有多对多关联:List知道它的Items,但是ListItem不知道包含列表。级联是saveupdate。

因此,每当我尝试删除ListItem实体时,我都会得到一个SQLException,说我打破了参照完整性。 NHibernate尝试删除我的ListItem而不删除链接表中的相应行。问题是,是否有可能指示NHibernate删除我的ListItem而不破坏参照完整性?

如果我必须从所有包含列表中手动删除该项目,我该如何正确地执行此操作?

非常感谢任何建议。

乌鲁

1 个答案:

答案 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();
  }
}