在工作单元开始时,我调用会话。开始平移我注意到,即使在事务期间没有对数据库进行任何更改,提交仍然是昂贵的。
如果没有更改,我只调用session.close,而不调用transaction.commit,会发生什么?交易是否仍在处置
我已经检查了NHibernate 3.1.0
的源,似乎调用ISession.Close()
应该会为默认实现生成ITransaction.Dispose()
。但是,在现有应用程序中使用它并不会导致显式事务commit
或rollback
与NHibernate Profiler
一起检查。
我认为让事务只依赖ISession.Close()
不是一个好主意,因为它可能会导致不可预测的行为。如果有人会采用这种特殊的方法,并将ISession.SaveOrUpdate
。。。您的实体将不会持久化。
更新:
从Sql Server
的角度来看,我认为这取决于您的事务isolation level
,但我敢肯定,您迟早会遇到锁定或超时。请参阅本sql-server
具体问题:
当连接关闭时,未提交的事务会发生什么?