2013-01-04 62 views
33

我總是想嘗試使用TransactionScope,但我無法弄清楚人們看到的有用的東西。因此,讓我們舉個例子:如何正確使用TransactionScope?

using(TransactionScope tran = new TransactionScope()) { 
    CallAMethodThatDoesSomeWork1(); 
    CallAMethodThatDoesSomeWork2(); 
    tran.Complete(); 
} 

所以,最基本的問題:我怎樣寫「CallAMethodThatDoesSomeWork1()」,使其知道如何推出它的行動回來,如果讓我們說「CallAMethodThatDoesSomeWork2()」拋出一個異常?

+2

是的,這是基本的問題 –

+3

重複http://stackoverflow.com/questions/5265841/how-to-create-a-class-that-works-with- transactionscope?rq = 1? – Fabske

+1

@Fabske - 這裏沒有答案 – Denis

回答

20

您調用的方法中的代碼需要事務感知,並在活動事務中登記。這意味着創建或使用它們的資源管理器類(見Implement Your Own Resource Manager

你做到這一點通過實施IEnlistmentNotification並在交易中爭取。當交易完成後,事務管理器將調用的方法是接口,以便在定義你的代碼可以做/撤銷工作

+0

哦,我明白了怎麼做,希望MSDN的「TransactionScope」頁面說 - 它一直在看它,完全沒有看到過TransactionScope的觀點。這是神奇的界面使其工作。這很有道理! – Denis