NHibernate Merge在尝试插入之前没有检查现有行?

时间:2013-06-02 05:11:41

标签: .net nhibernate

我正在编写一个N层应用程序,它使用NHibernate和Repository模式与SQL存储进行交互。由于项目是N层,NHibernate实体映射到域模型,然后映射到视图模型,反之亦然,导致模型在NHB会话之间断开连接。

我遇到的问题是,当我尝试使用Merge()方法保存一个已更改的实体(最近实例化以表示来自前一个会话的旧的,已更改的实体的实体)时,我得到一个关于违规的异常我的表上有一个唯一索引,因为NHB正在尝试插入而不是更新具有与实体相同ID的行。我已经仔细检查了我的映射,并且我的实体在所有正确的位置包含了所有正确的值...看起来NHB在尝试插入之前是否存在行是否存在,想法?

1 个答案:

答案 0 :(得分:0)

找出问题所在。导致此问题的对象图包含与子对象引用回父母的一对多关系,而我的映射器正在为每个子对父对象的引用实例化相同“实体”的新实例。这意味着ChildA和ChildB的“父”属性持有不同的实例,但包含相同的信息,不知何故导致NHB想要插入新记录而不是从PK做出决定。我发现这种行为很奇怪,因为我重写了Equals / GetHashCode以执行基于值的相等,但我很高兴能够解决问题。