将不确定变为确定~transactionscope何时提升为分布式事务~大结局

简介:

之前写过三篇这个文章系列,都是围绕一个主题,那就是.net何时将transactionscope提升为分布式事务,今天我借用ThreadStatic特性,把这个知识点又证明了一下,下面总结一下:

transactionscope文章:

第二十六回   将不确定变为确定~transactionscope何时提升为分布式事务?

第二十七回   将不确定变为确定~transactionscope何时提升为分布式事务~续

第二十八回   将不确定变为确定~transactionscope何时提升为分布式事务~再续(避免引起不必要的MSDTC)

ThreadStatic特性文章:

基础才是重中之重~ThreadStatic静态字段在每个线程里的唯一性

大总结:

数据上下文只有是一个,才有可能不会产生分布式事务

数据上下文是一个,并且SubmitChange也是一个,这时,才不会提升为分布式事务(MSDTC)

看一下图,这是一个ThreadStatic特性的DataContext的图示,我已经禁用的MSDTC服务

而下面的图是我使用普通的实例数据上下文,它将产生多个数据上下文,从而将transactionscope提升为分布式事务,所以,下面图的异常也就被抛出来了,呵呵!

下面为方法调用:普通实例上下文

ThreadStatic特性的数据上下文

下面是事务的程序块,它有多个操作,每个操作都有自己的SubmitChanges()

而它产生的SQL语句,则是使用了一个SQL连接池,性能方面已经是最优了!

下面是使用iunitofwork模块下,解决程序提升到MSDTC的实例代码,供大家参考

IUnitOfWork unitOfWork = new EEE114Entities();
            iUser_Info = new EEE114RepositoryBase<User_Info>(unitOfWork);
            iUser_Profile = new EEE114RepositoryBase<User_Profile>(unitOfWork);
            using (TransactionScope trans = new TransactionScope())
            {
                unitOfWork.IsNotSubmit = true;
                iUser_Info.Insert(new User_Info
                {
                    UserName = "test",
                    Password = "",
                    RegisterTime = DateTime.Now,
                    RegisterIP = "",
                    UserStatus = 0,
                    ApproveStatus = "00000",
                    Experience = 0,
                    Money = 0,
                    Integral = 0,
                });

                iUser_Profile.Insert(new User_Profile
                {
                    UserID = 98056,
                    RealName = "iunitofwork占占测试MSDTC"
                });
                unitOfWork.Save();
            }

 本文转自博客园张占岭(仓储大叔)的博客,原文链接:将不确定变为确定~transactionscope何时提升为分布式事务~大结局,如需转载请自行联系原博主。

目录
相关文章
原理篇:Seata TCC模式是如何解决幂等性、资源悬挂、空回滚问题的
原理篇:Seata TCC模式是如何解决幂等性、资源悬挂、空回滚问题的
854 0
|
3天前
|
Dubbo 应用服务中间件 微服务
分布式事物【Hmily实现TCC分布式事务、Hmily实现TCC事务、最终一致性分布式事务解决方案】(七)-全面详解(学习总结---从入门到深化)(上)
分布式事物【Hmily实现TCC分布式事务、Hmily实现TCC事务、最终一致性分布式事务解决方案】(七)-全面详解(学习总结---从入门到深化)
52 1
|
3天前
|
消息中间件 RocketMQ 微服务
分布式事物【Hmily实现TCC分布式事务、Hmily实现TCC事务、最终一致性分布式事务解决方案】(七)-全面详解(学习总结---从入门到深化)(下)
分布式事物【Hmily实现TCC分布式事务、Hmily实现TCC事务、最终一致性分布式事务解决方案】(七)-全面详解(学习总结---从入门到深化)
68 1
|
8月前
|
SQL 存储 数据库
C#三十三 事务
C#三十三 事务
27 0
|
12月前
|
消息中间件 JavaScript 小程序
多线程如何实现事务回滚?一招帮你搞定!
多线程如何实现事务回滚?一招帮你搞定!
多线程如何实现事务回滚?一招帮你搞定!
|
12月前
|
存储 缓存 Java
每日一博 - 常见的Spring事务失效&事务不回滚案例集锦
每日一博 - 常见的Spring事务失效&事务不回滚案例集锦
79 0
|
消息中间件 存储 监控
七种常见分布式事务详解(2PC、3PC、TCC、Saga、本地事务表、MQ事务消息、最大努力通知)
七种常见分布式事务详解(2PC、3PC、TCC、Saga、本地事务表、MQ事务消息、最大努力通知)
843 0
五十、查看与结束正在运行的事务
五十、查看与结束正在运行的事务
65 0
|
消息中间件 存储 关系型数据库
不就是分布式事务,这下彻底清楚了
不就是分布式事务,这下彻底清楚了
136 0
不就是分布式事务,这下彻底清楚了