NHibernate 提交数据库更改而无需显式调用保存或更新

标签 nhibernate

我在 ASP.NET 中使用 Nhibernate 2.0。
我在页面请求时开始事务并在最后提交事务。
在页面期间:
- 我得到一个对象
- 我改变了对象属性
- 我验证对象
- 如果验证没问题,我会对该对象调用 save-update
- 如果验证错误,我不会对该对象进行任何保存更新调用
- 我总是在页面末尾提交事务。

问题是,当验证错误并且我没有在对象上调用 save-update 时,commit transactin 会在数据库中提交更改。

我将 FlushMode 设置为 Never 但没有任何变化。

有建议吗?我错了什么?

最佳答案

During the page: - I get an object



如果您从 session 中获取对象,那么您就误解了 Update。更新用于将现有实体附加到 session 。如果您从 session 中获取实体,则该实体已附加到该 session ,因此更新毫无意义。

在这种情况下,SaveOrUpdate 与 Update 没有关系——同样的事情。

NHibernate 跟踪 session 中对象的更改。当您提交事务或刷新 session 时,它将检查任何更改(有更改),然后将这些更改提交到数据库。重点是跟踪哪些对象被更改(脏)不是你的工作,而是 NHibernates。

其他 ORM 可能要求您自己跟踪更改并对要保留的任何更改的对象显式调用某种更新,但 NH 不会那样工作。

所以回答你的问题,如果验证失败,你不想提交事务。

NH 还坚持工作单元模式。因此,如果您在与验证工作的业务逻辑不同的程序逻辑部分中进行提交,则可能会造成摩擦。

关于NHibernate 提交数据库更改而无需显式调用保存或更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1380581/

相关文章:

c# - 将数据库列映射到常量值,而不需要实体类中的属性

.net - 在 OnPreInsert、OnPreUpdate 中将对象添加到关联

wcf - NHibernate查询缓存和WCF

c# - NHibernate:在子集合中查找脏对象

NHibernate 3.3 和 SysCache

oracle - 在 Oracle 和 NHibernate 中映射长文本字符串

nhibernate - 为所有域类添加带有接口(interface)的 IAutoMappingOverride

c# - Spring 在 nhibernate 事务后不关闭 session

NHibernate Linq//带有子对象的FirstOrDefault//可能吗?

nhibernate - 流利的 NHibernate : How to map a 'Foreign Key' column in the mapping class