将不确定变为确定~transactionscope何时提升为分布式事务~SQL2005与SQL2008不同
Transactionscope何时被提升为分布式事务,即时要触发msdtc服务,这个问题与数据库版本有关,在前面的文章中,我的MSTDC系列出现了多个版本,有一点没有说清楚,测试的环境不同,所以产生了多个版本,下面我做一下总结:
第二十六回 将不确定变为确定~transactionscope何时提升为分布式事务?
第二十七回 将不确定变为确定~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。