Nhibernate工作单元和自动保存

时间:2014-04-30 09:58:52

标签: c# nhibernate

我已经实现了本教程所解释的工作单元: http://www.codeproject.com/Articles/543810/Dependency-Injection-and-Unit-Of-Work-using-Castle

虽然现在我遇到了一个奇怪的问题。

  • 我在一个工作单元(在事务中)中加载一个来自数据库的实体
  • 我更新该实体的属性
  • 我没有在我的存储库中调用save方法
  • 交易已提交

在这种情况下,我希望更新后的属性不会持久存储到数据库中。但它是。因此,在我的会话中加载的实体被跟踪并提交到数据库而不调用save。是什么造成的?如果不调用save,有没有办法告诉Nhibernate不要更新这些实体?

我意识到我可以解决这个问题,在我需要更新时只更新属性。唯一的风险是偶然更新财产,然后很难找到这个问题。 (例如,有些新人,不知道这很容易犯错误)

1 个答案:

答案 0 :(得分:1)

解释需要了解瞬态和持久实体之间的区别。瞬态实体是一个新实体,通过调用Save()使其成为持久实体。使用NHibernate检索的实体已经是持久的,并且在刷新会话时将自动保存对其所做的任何更改。 NHibernate的目标是在会话结束时使数据库与域模型保持一致。

请参阅chapter 9 in the documentation