2009-11-23 51 views
4

我一直在閱讀有關TransactionScope的內容,並對其與ADO.Net事務的互操作性有疑問。現在我們有一些數據訪問方法,每個方法都會調用一個存儲過程並開始並提交他們自己的單個事務。簡單明瞭,樣板的東西,方法是這樣的:在TransactionScope中使用ADO.Net事務?

sqlCommand = //create SQLCommand with Stored proc 
SqlTransaction myTransaction = myConnection.BeginTransaction(); 
sqlCommand.Transaction = sqlTransaction; 
sqlCommand.Execute(); 
sqlTransaction.Commit(); 

我已經簡化的東西一點,但你的想法。

我現在需要連續調用其中的兩個類方法,並將它們作爲一個團隊從我的業務層提交或回滾。我無法修改數據方法,所以我正在考慮將這兩個調用放在TransactionScope塊中。

如果我這樣做,創建TransactionScope時應該使用什麼樣的參數?我已經使用TransactionScopeOption.RequiresNew選項嘗試過了,事情似乎有效,但這只是我的嘗試,我不確定是否要走。 (在這裏我要指出的是,這些都是SQL事務完全是相同的SQL服務器上運行。)

我看到的TransactionScope具有構造選項處理COM +的交易。因爲我正在使用ADO.Net事務,這與此有關嗎?感謝您的建議。

回答

7

TransactionScope文檔here是一個很好的開始。

基本上它使處理ADO級別的交易變得不必要。連接將自動考慮現有的環境交易(默認)。

請記住,您還可以更改連接的方式通過在連接字符串中的環境交易入伍。這link將提供更多的細節。

徵募'true'。 true表示SQL Server連接池 自動在創建線程的當前 事務上下文中註冊連接。

+1

msdn鏈接已死亡。一個問題是,如果連接創建在作用域之外,則需要通過調用'connection.EnlistTransaction(Transaction.Current)'手動登錄到環境事務。 – kristianp 2015-07-09 02:29:37

+0

永久鏈接!我已經鏈接到MSDN文檔,併發布了代碼段。 – micahtan 2015-07-17 20:13:26