【问题标题】:Nhibernate unit of work and automatic saving休眠工作单元和自动保存
【发布时间】:2014-06-16 14:19:52
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • “因此,在我的会话中加载的实体被跟踪并提交到数据库而不调用 save” -- 在大多数情况下,这被视为一个巨大的好处 的 NHibernate -- 不必担心你的域模型何时被持久化到数据库中。

标签: c# nhibernate


【解决方案1】:

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

chapter 9 in the documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 2014-01-27
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    相关资源
    最近更新 更多