休眠工作单位和自动保存

本文关键字:保存 工作 单位 休眠 | 更新日期: 2023-09-27 18:00:50

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

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

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

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

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

休眠工作单位和自动保存

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

请参阅文档中的第9章。