开发者社区> mcy247> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

将不确定变为确定~transactionscope何时提升为分布式事务~SQL2005与SQL2008不同

简介:
+关注继续查看

Transactionscope何时被提升为分布式事务,即时要触发msdtc服务,这个问题与数据库版本有关,在前面的文章中,我的MSTDC系列出现了多个版本,有一点没有说清楚,测试的环境不同,所以产生了多个版本,下面我做一下总结:

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

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

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

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

一 数据库与WWW服务器不在一台电脑,数据库为SQL2005,一个savechanges,才不会提升为MSDTC,这在之前已经做了证明,将不确定变为确定~transactionscope何时提升为分布式事务~大结局

二 数据库与WWW服务器不在一台电脑,数据库为SQL2008,多个数据上下文,多个savechanges,它也不会提升为MSDTC,这个比较强,原来MSDTC还与数据库版本有关,呵呵 ,将不确定变为确定~transactionscope何时提升为分布式事务~续

下面是对SQL2008上做的一个测试

  using (TransactionScope trans = new TransactionScope())
            {
                try
                {

                    dbs.Entry<Classroom_Info>(entity);
                    dbs.Set<Classroom_Info>().Add(entity);
                    dbs.SaveChanges();//dbs上下文的SaveChanges

                    //绑定学生
                    entity.User_Classroom_R.ToList().ForEach(i =>
                    {
                        i.ClassroomInfoID = entity.ClassroomInfoID;
                    });

                    //绑定学生
                    entity.User_Classroom_R.ToList().ForEach(i =>
                    {
                        db.Entry<User_Classroom_R>(i);
                        db.Set<User_Classroom_R>().Add(i);
                    });
                    db.SaveChanges();//db上下文的savechanges

                    trans.Complete();//提交事务
                }
                catch (Exception)
                {
                    trans.Dispose();//出现异常,事务手动释放
                    throw;
                }
            }

总结:

对于SQL2008数据库来说,只有不同的数据库时,才会认为它是一个分布式事务,即SQL链接串不同时,才会被提升为MSDTC。

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
mysql数据库优化之 如何选择合适的列建立索引
mysql数据库优化之 如何选择合适的列建立索引 在where 从句,group by 从句,order by 从句,on 从句中出现的列; 索引字段越小越好; 离散度大的列放到联合索引的前面;比如:     select * from payment where staff_id = 2 and customer_id = 236;     针对上面的查询是  index(sftaff_id, customer_id) 好?还是index(customer_id, staff_id)好?     因为customer_id的离散度更大,因此用后面的更合适!! 那么问题来了。
889 0
JDBC(七)事务Transaction
事务Transaction是一组要作为单一的原子动作进行的行为。 要么执行所有的操作,要么都不执行。 我们可以通过它来调用事务: connection.setAutoCommit(false); 如果在事务中间出现失败,就需要对事务进行回滚 connection.rollback(); 如果所有操作都没有失败,那最终需要提交。
749 0
SQL Server 2008 中收缩数据库(DUMP,TRANSACTION,TRAN,无效,语法错误)
原文:SQL Server 2008 中收缩数据库(DUMP,TRANSACTION,TRAN,无效,语法错误) 从SQL SERVER 2008 开始,我们已经不能再用以前 DUMP TRAN 数据库名 WITH NO_LOG 的...
1335 0
JPA的事务注解@Transactional使用总结
在项目开发过程中,如果您的项目中使用了Spring的@Transactional注解,有时候会出现一些奇怪的问题,例如:   明明抛了异常却不回滚? 嵌套事务执行报错? ...等等   很多的问题都是没有全面了解@Transactional的正确使用而导致的,下面一段代码就可以让你完全明白@Transactional到底该怎么用。
1151 0
SQL基础15——数据库事务(TRANSACTION)
一、数据库事务     数据库事务是指作为单个逻辑工作单元执行的一系列操作,可以认为事务就是一组不可分割的SQL语句     二、数据库事务的ACID属性     原子性(atomic)        事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
772 0
+关注
mcy247
做自己的太阳 无需凭借谁的光
1070
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载