如果我不调用transaction.close或transaction.rollback会发生什么?

时间:2011-07-05 20:43:46

标签: hibernate nhibernate sql-server-express

在工作单元的开头,我调用session.BeginTransdaction 我注意到即使在事务期间没有对DB进行任何更改,提交仍然很昂贵。

如果没有变化,我会调用session.close并且不调用transaction.commit会发生什么?交易是否仍在处理?

1 个答案:

答案 0 :(得分:0)

我检查了NHibernate 3.1.0的来源,似乎调用ISession.Close()会导致默认实现ITransaction.Dispose()。但是,在现有应用程序中使用它时会导致显式事务commitrollback - 使用NHibernate Profiler进行检查。

我认为让交易仅依赖于ISession.Close()并不是一个好主意,因为它可能导致不可预测的行为。如果某人将调整该特定方法并包含ISession.SaveOrUpdate ...您的实体将不会被持久化。

<强>更新

Sql Server角度来看,我认为这取决于您的交易isolation level,但我很确定您迟早会遇到锁定或超时。请参阅此sql-server具体问题:

What happens to an uncommitted transaction when the connection is closed?