2011-07-03 21 views
0

我已經編寫了TransactionContext類,該類在應用程序層實例化併發送到業務層和數據層,以允許嵌套事務。現在我必須決定: 1.如果需要,我應該使用顯式事務並讓每個函數調用開始,提交或回滾事務嗎? 2.我可以隱式啓動事務創建TransactionContext時,讓嵌套方法只回滾我應該在事務中包裝每個db調用嗎?

現在,因爲它更容易的代碼,我會用第二種方法:沒有擔心開始,在每一個方法提交或回滾,只是在事務上設置回滾標誌,並讓最頂級的方法擔心提交或回滾。問題是我不確定是否將所有數據庫流量包裝在事務中是一個好主意。

在事務內包裝所有數據庫調用時可能產生的負面影響是什麼?

我的設置是ASP.NET應用程序和MSSQL服務器數據庫。應用程序和數據庫可能位於不同的服務器上,如果這會影響決策。

回答

3

單個SQL語句已包裝在隱式事務中。在需要的地方使用事務,即在原子操作中更新多個表時。將所有調用包裝到數據庫中並不是一個好主意:它可能會導致吞吐量和阻塞的降低。

Altough SQL Server支持嵌套事務,他們可能無法正常工作,你可能期望:

犯下內交易是通過 的SQL Server數據庫引擎 忽略。根據 最後一筆交易末尾採取的 操作,交易爲 承諾或回滾。如果提交外部事務 ,則內部事務 也會提交 。如果外部交易是 回滾,則所有內部 交易也回滾, ,不管內部交易是否分別由 承諾。

參考:Nesting Transactions

相關問題