淺析LINQ事務(wù)處理的實(shí)現(xiàn)
LINQ事務(wù)處理是什么情況?LINQ事務(wù)處理的原理是什么呢?LINQ事務(wù)處理的基本實(shí)現(xiàn)是怎么樣的呢?那么這里我們就向你詳細(xì)LINQ事務(wù)處理的基本情況,希望對(duì)你有所幫助。
LINQ事務(wù)處理依賴于TransactionScope,一個(gè)使用依賴全局變量的非OO設(shè)計(jì)模式的.NET 2.0類。
TransactionScope被用來為一組變化設(shè)置事務(wù)。不像在ADO.NET中的事務(wù)對(duì)象,TransactionScope不限于一個(gè)單獨(dú)的數(shù)據(jù)庫(kù)鏈接。它最常用的一個(gè)案例是在多臺(tái)服務(wù)器上運(yùn)行一個(gè)事務(wù)。
當(dāng)一個(gè)TransactionScope對(duì)象被創(chuàng)建時(shí),它會(huì)自動(dòng)將自己注冊(cè)成線程的事務(wù)。所有的事務(wù)感知操作也將會(huì)自動(dòng)地使用這個(gè)事務(wù),而不需要將事務(wù)對(duì)象傳遞給對(duì)象。事務(wù)感知對(duì)象的例子包括SQLCommand類和LINQ to SQL對(duì)象。
這種設(shè)計(jì)的一個(gè)比較嚴(yán)重的副作用是事務(wù)和操作間的連接不是那么直接。
LINQ事務(wù)處理實(shí)例
- Public Sub OperationWithTransaction()
- Using t As New Transactions.
- TransactionScope Operation1()
- t.Complete() End Using End Sub
就上面的這個(gè)例子,當(dāng)OperationWithTransaction被調(diào)用時(shí),Operation1函數(shù)中的所有動(dòng)作都和事務(wù)相關(guān)聯(lián)。就是在事務(wù)并沒有明確傳遞給方法的時(shí)候,這種情況也會(huì)發(fā)生。這就使得對(duì)Operation1的調(diào)試變得有些復(fù)雜,尤其是在堆棧跟蹤(Stack Trace)上事務(wù)范圍(transaction scope)被創(chuàng)建了多個(gè)層時(shí)。
最后需要提醒的是,在使用多線程時(shí),一個(gè)給定的TransactionScope只能應(yīng)用在當(dāng)前線程上。
LINQ事務(wù)處理的基本情況就向你介紹到這里,希望對(duì)你了解和學(xué)習(xí)LINQ事務(wù)處理有所幫助。
【編輯推薦】