【发布时间】:2014-11-12 04:23:45
【问题描述】:
我正在使用 nhibernate 开发一个系统,我在异常捕获块中看到很多以下两行:
session.Flush();
session.RollbackTransaction();
我被这个逻辑搞糊涂了,看起来是不必要的工作来刷新更改,然后使用事务回滚做法。
我想设置一个参数来删除这些刷新调用并仅依赖 RollbackTransaction 方法,但我遇到了这个question。接下来,我阅读了更多链接的文档,并阅读了以下信息:
如果你回滚事务,你应该立即关闭并丢弃当前会话,以确保 NHibernate 的内部状态是一致的。
这是什么意思?我们目前将 Session 生命周期与 Web 请求的开始和结束操作配对,所以我担心我们调用 flush THEN 回滚的原因是为了保持会话处于有效状态。
有什么想法吗?
【问题讨论】:
-
有一点很清楚:在回滚之前调用 flush 是多余的。它在代码中的任何地方使用的事实并没有改变这一事实。而且,如文档中所述 - 回滚后应立即结束会话。这就是为什么我们应该在网络中对写入和读取有特殊要求。如果写操作/请求/工作单元的某些部分失败 - 回滚,返回错误消息,消失会话..
标签: nhibernate transactions rollback