0

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

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

如果我必须从所有包含列表中手动删除该项目,我该如何正确地做到这一点?

非常感谢您的任何建议。

乌鲁

4

1 回答 1

0

您需要将孩子上的映射设置为inverse=true. 从另一个线程

当你调用 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();
  }
}
于 2010-09-18T20:32:22.360 回答