【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