在工作單元的開始,我打電話給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?
我不關心濫用。我關心的是數據庫。數據庫將有交易沒有結束(我認爲是這樣)。 –
你能解釋如何提交貴?你是如何衡量的? –