【问题标题】:NHibernate many-to-many and deleting an itemNHibernate 多对多和删除项目
【发布时间】:2011-04-14 03:19:08
【问题描述】:

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

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

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

非常感谢您的建议。

乌鲁

【问题讨论】:

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


    【解决方案1】:

    您需要将孩子的映射设置为inverse=true。来自another thread

    当你调用 SaveOrUpdate NHibernate 首先删除所有的孩子 对象。然后,因为两者都没有 关系被标记为反向, NHibernate 还尝试设置 子表中的外键列 为空。由于行已经 已删除,您收到第二个 错误。您需要设置 inverse=true on 你关系的一方面要修复 这。这通常是在一个 (主键或父)端。如果你 不要这样做,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();
      }
    }
    

    【讨论】:

    • 但是,现在添加到列表不起作用!!!该项目本身已保存到数据库中,但我无法将其添加到列表中。我正在使用 list.Items.Add(newItem); _session.Save(newItem); _session.Update(list);
    • 添加到列表如何工作?如果您需要,请更新您的问题,以便我们了解更多详细信息。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 2011-06-13
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多