回到目錄
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。
回到目錄
作者:倉儲大叔,張占嶺,
榮譽:微軟MVP
QQ:853066980
支付寶掃一掃,為大叔打賞!
