NHibernate - 刷新会话后仍然很脏

时间:2011-10-19 01:44:13

标签: c# nhibernate

我遇到了NH(v2.1.2)的问题,在我刷新了该会话中修改过的唯一实体之后仍然认为会话是脏的。

我使用此映射设置了parent->子关系,如下所示:

<set name="ChildItem" access="field.camelcase-underscore"
     lazy="true"
     cascade="save-update"
     inverse="true">
  <key column="PARENT_ITEM_KEY"/>
  <one-to-many class="....ChildItem"/>
</set>

以下是重现问题的步骤:

1 - 创建新的ChildItem并将其添加到Parent的集合中,但不保存它。现在session.IsDirty()返回true(如预期的那样)。

2 - 调用session.Refresh(parent)以恢复我的更改。刷新后,父级的集合现在不包含新的子项(如预期的那样)。

3 - 现在session.IsDirty()返回 true - 虽然我希望错误,因为我刷新了唯一被修改的项目。

通过调试器深入研究SessionImpl,我可以看到NH在它的ActionQueue中仍然有一个待处理的插入新的ChildItem。

在这种情况下,是否可以将会话返回到IsDirty()= false状态?我不想为此放弃整个会议。

任何帮助非常感谢!谢谢!

2 个答案:

答案 0 :(得分:1)

好的,所以这个似乎没有答案。 最终似乎放弃了工作会议是放弃变革的唯一方法。这意味着一天左右的重构/重新测试,但现在已经开始运行。

答案 1 :(得分:0)

您可以尝试以下操作而不是Refresh()。这是Refresh()问题的常用解决方法,但我不知道它是否会对您的情况有所帮助。

session.Evict(parent);
session.Load(parent, parent.Id);