【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來跨多個資源管理器協調事務。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM