ADO.NET和LINQ中古怪的事務特性

LINQ中的事務 依賴於TransactionScope ,一個使用依賴全局變量的非OO設計模式的.NET 2.0類。


  TransactionScope被用來爲一組變化設置事務。不像在ADO.NET中的事務對象,TransactionScope不限於一個單獨的數據庫鏈接。它最常用的一個案例是在多臺服務器上運行一個事務。


  當一個TransactionScope對象被創建時,它會自動將自己註冊成線程的事務。所有的事務感知操作也將會自動地使用這個事務,而不需要將事務對象傳遞給對象。事務感知對象的例子包括SQLCommand類和LINQ to SQL對象。


  這種設計的一個比較嚴重的副作用是事務和操作間的連接不是那麼直接。


  Public Sub OperationWithTransaction() Using t As New Transactions.TransactionScope Operation1() t.Complete() End Using End Sub


  就上面的這個例子,當OperationWithTransaction被調用時,Operation1函數中的所有動作都和事務相關聯。就是在事務並沒 有明確傳遞給方法的時候,這種情況也會發生。這就使得對Operation1的調試變得有些複雜,尤其是在堆棧跟蹤(Stack Trace)上事務範圍(transaction scope)被創建了多個層時。


  最後需要提醒的是,在使用多線程時,一個給定的TransactionScope只能應用在當前線程上。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章