【问题标题】:NHibernate: SaveOrUpdate - Duplicate Key Exception on ChildNHibernate:SaveOrUpdate - 子项重复键异常
【发布时间】:2012-06-19 11:58:17
【问题描述】:

我开发了一个 Web 应用程序,它有一个相当复杂的保存例程。用户构建和修改一系列计划,然后选择保存数据。此时,所有的添加、删除和修改都被一次性保存(都在一个事务中)。

Plan
    Collection Of Child
        Collection of ChildDetail

大部分保存是通过在计划对象上调用 SaveOrUpdate 并让此保存管理计划及其子项来执行的。当我想插入一条新记录时,我使用零作为未保存的值,并使用 cascade=all-delete-orphan 来确保如果在客户端删除了子对象或子详细信息对象,则该对象被删除。

但是当发生以下情况时,我收到一个异常:用户创建一个包含子对象的计划并保存它们。这样可以省钱。

Plan(id=0)
    Child[0](id=0), Child[1](id=0), Child[2](id=0)

如果用户随后移除子对象,并在其位置添加新的子对象,然后尝试保存更改。

Plan(id=123)
    Child[0](id=0), Child[1](id=0), Child[2](id=0)

这会引发 GenericAdoException 无法插入 Child 并带有内部异常“SQL0803 Duplicate Key Value Specified”。

我正在寻找的行为是 NHibernate 删除以前的子对象,然后在计划上调用 SaveOrUpdate 时插入新的子对象。如何在仍然让父母管理关系的同时实现这一目标?

【问题讨论】:

    标签: nhibernate


    【解决方案1】:

    我暂时找到的一个解决方案是将已删除子项的 ID 传递给保存例程。然后,我将新孩子的 id 设置为已移除孩子的 id。有效地将删除/添加转换为更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 2018-12-18
      • 2013-04-11
      相关资源
      最近更新 更多