在工作单元的开头,我调用session.BeginTransdaction 我注意到即使在事务期间没有对DB进行任何更改,提交仍然很昂贵。
如果没有变化,我会调用session.close并且不调用transaction.commit会发生什么?交易是否仍在处理?
答案 0 :(得分:0)
我检查了NHibernate 3.1.0
的来源,似乎调用ISession.Close()
会导致默认实现ITransaction.Dispose()
。但是,在现有应用程序中使用它时不会导致显式事务commit
或rollback
- 使用NHibernate Profiler
进行检查。
我认为让交易仅依赖于ISession.Close()
并不是一个好主意,因为它可能导致不可预测的行为。如果某人将调整该特定方法并包含ISession.SaveOrUpdate
...您的实体将不会被持久化。
<强>更新强>:
从Sql Server
角度来看,我认为这取决于您的交易isolation level
,但我很确定您迟早会遇到锁定或超时。请参阅此sql-server
具体问题:
What happens to an uncommitted transaction when the connection is closed?