在工作单元的开始,我打电话给session.BeginTransdaction 我注意到,即使在事务期间对数据库做了任何更改,提交仍然很昂贵。如果我不调用transaction.close或transaction.rollback,会发生什么情况?
如果没有更改,会发生什么情况我只是调用session.close并且不会调用transaction.commit?交易是否仍然处置?
在工作单元的开始,我打电话给session.BeginTransdaction 我注意到,即使在事务期间对数据库做了任何更改,提交仍然很昂贵。如果我不调用transaction.close或transaction.rollback,会发生什么情况?
如果没有更改,会发生什么情况我只是调用session.close并且不会调用transaction.commit?交易是否仍然处置?
我已经检查的NHibernate 3.1.0
来源,似乎调用ISession.Close()
应导致ITransaction.Dispose()
的默认实现。但是,尽管如此,在现有应用程序中使用而不是导致明确的交易commit
或rollback
- 使用NHibernate Profiler
进行检查。
我不认为这是一个好主意,让交易仅依赖于ISession.Close()
,因为它可能导致不可预知的行为。如果某人将适应该特定方法并包含ISession.SaveOrUpdate
......您的实体将不会持续下去。
UPDATE:
从Sql Server
角度来看,我认为这取决于你的交易isolation level
,但我敢肯定,你迟早会遇到锁或超时。请参阅本sql-server
具体问题:
What happens to an uncommitted transaction when the connection is closed?
我不关心滥用。我关心的是数据库。数据库将有交易没有结束(我认为是这样)。 –
你能解释如何提交贵?你是如何衡量的? –