0
点赞
收藏
分享

微信扫一扫

将不确定变为确定~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。

 ​​回到目录​​

 

 


举报

相关推荐

0 条评论