LINQ中的事務(wù) 依賴于TransactionScope ,一個使用依賴全局變量的非OO設(shè)計模式的.NET 2.0類。
TransactionScope被用來為一組變化設(shè)置事務(wù)。不像在ADO.NET中的事務(wù)對象,TransactionScope不限于一個單獨的數(shù)據(jù)庫鏈接。它最常用的一個案例是在多臺服務(wù)器上運行一個事務(wù)。
當(dāng)一個TransactionScope對象被創(chuàng)建時,它會自動將自己注冊成線程的事務(wù)。所有的事務(wù)感知操作也將會自動地使用這個事務(wù),而不需要將事務(wù)對象傳遞給對象。事務(wù)感知對象的例子包括SQLCommand類和LINQ to SQL對象。
這種設(shè)計的一個比較嚴重的副作用是事務(wù)和操作間的連接不是那么直接。
Public Sub OperationWithTransaction() Using t As New Transactions.TransactionScope Operation1() t.Complete() End Using End Sub
就上面的這個例子,當(dāng)OperationWithTransaction被調(diào)用時,Operation1函數(shù)中的所有動作都和事務(wù)相關(guān)聯(lián)。就是在事務(wù)并沒 有明確傳遞給方法的時候,這種情況也會發(fā)生。這就使得對Operation1的調(diào)試變得有些復(fù)雜,尤其是在堆棧跟蹤(Stack Trace)上事務(wù)范圍(transaction scope)被創(chuàng)建了多個層時。
最后需要提醒的是,在使用多線程時,一個給定的TransactionScope只能應(yīng)用在當(dāng)前線程上。
新聞熱點
疑難解答