1. 程式人生 > >.NET Core下的TransactionScope

.NET Core下的TransactionScope

.NET FrameWork時期:

TransactionScope是FCL System.Transactions名稱空間下的分散式事務元件,它預設為本地事務,當系統有需要時可以自動提升為分散式事務,前提是要開啟MSDTC服務。

注:SQL2008及以上資料庫,只有不同的資料庫時才會認為他是一個分散式事務,即:SQL連結串不同時,才會被提升為MSDTC

建立新的TransactionScope物件後,將啟動事務範圍。如下程式碼所示:

void RootMethod()
{
     using(TransactionScope scope = new TransactionScope())
     {
          
/* Perform transactional work here */ SomeMethod(); scope.Complete(); } } void SomeMethod() { using(TransactionScope scope = new TransactionScope()) { /* Perform transactional work here */ scope.Complete(); } }

 

.NET Framework 4.5.0時System.Transactions.TransactionScope 在與 async/await 一起工作時會產生一個嚴重的 bug 。由於這個錯誤,TransactionScope 不能在非同步程式碼中正常操作。

4.5.1修復了這個問題,在建構函式中指定:TransactionScopeAsyncFlowOption.Enabled 

預設TransactionScopeAsyncFlowOption是Suppress,相容4.5.1之前的版本

 

.NET Core時期:

自版本2.1起,.NET Core中的System.Transactions實現不包括對分散式事務的支援,因此不能使用TransactionScope或CommittableTransaction來跨多個資源管理器協調事務。