首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

再探 System.Transactions:輕量級交易、巢狀範圍與最佳實務

     編輯:關於.NET

簡單交易的建立

System.Transactions 命名空間讓交易處理比以往任何技術都簡單。只需參考 System.Transactions.dll,將交易性代碼包裹在 using 區塊中建立 TransactionScope,最後呼叫 Complete()。若發生例外,using 區塊結束時會自動釋放並回滾交易。

目前交易與自動登記

TransactionScope 實例化後會建立「目前交易」(ambient transaction)。任何資源管理器(如 SqlConnection)在開啟連線時,若連線字串 auto-enlist=true(預設),會自動加入該交易範圍。可透過 Transaction.Current 檢查是否存在目前交易。

交易選項設定

透過 TransactionOptions 可調整隔離等級(預設 Serializable)與逾時時間(預設 1 分鐘)。TransactionScope 有多個建構函式多載,支援 TransactionScopeOption 列舉:

  • Required(預設):已有交易則加入,否則建立新交易。
  • RequiresNew:永遠建立新交易。
  • Suppress:不參與目前交易,也不建立新交易。

正確釋放與 using 區塊的重要性

若 TransactionScope 未正確釋放,交易會保持開啟直到垃圾回收或逾時,鎖定資源。務必使用 using 或 try/finally 確保及時釋放。離開 using 區塊時會呼叫 Dispose,若已呼叫 Complete() 則提交,否則回滾。

輕量級交易與 DTC 升級

輕量級交易 不使用 Microsoft DTC(分散式交易協調器),僅在本機資源管理器(如 SQL Server 2005+)運作。當涉及第二個資源管理器時,才升級為分散式交易(需 DTC)。SQL Server 2000 不支援輕量級交易,所有交易皆升級為 DTC。

何時使用 System.Transactions?

  • 需要分散式交易時。
  • 資源管理器支援輕量級交易時。
  • 單一資料庫多命令且不支援輕量級交易時,ADO.NET 交易(SqlTransaction)效率更高,因不需 DTC。

巢狀交易範圍

巢狀方法中,內層 TransactionScope 的 TransactionScopeOption 決定行為:

  • Required:加入外層交易,所有範圍必須皆呼叫 Complete() 才會提交。
  • RequiresNew:建立獨立交易,與外層無關。
  • Suppress:在無交易環境下執行。

最佳實務總結

  • 進入/退出交易要快,減少資源鎖定時間。
  • 需要時才建立交易,執行命令後盡快完成釋放。
  • 交易期間避免執行非資料庫相關代碼。
  • 善用輕量級交易特性,避免不必要的 DTC 開銷。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved