中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

基礎才是重(zhong)中(zhong)之重(zhong)~你是否真正了解TransactionScope?

回到目錄

你是否真正了解TransactionScope?

相關文章

將不確定變為確定~transactionscope何時提升為分布式事務

將不確定變為確定~transactionscope何時提升為分布式事務~續      

將不確定變為確定~transactionscope何時提升為分布式事務~再續(避免引起不必要的MSDTC)

一 了解事務選項,用它來控制嵌套事務

 

    public enum TransactionScopeOption
    {
        //如果存在環境事務(我認為應該叫嵌套事務,氛圍事務,ambient transaction),那么就加入其中,
如果不存在就創建新事務。如果加入事務那么只有在環境事務提交后才算提交。
Required = 0, //這個事務范圍將創建自己(ji)的事務,不會加(jia)入到(dao)當前(qian)外部事務中(zhong) RequiresNew=1, // 如果處于當前活動事務范圍內,那么這個事務范圍既不會加入氛圍事務 (ambient transaction),也不會創建自己的事務。
當部分代碼需要留在事務外部時,可以使用該選項。
Suppress = 2, }

 

二 何時會提升為分布式事務(何時發起MSDTC請求)

當你的WEB服務器與數據庫服務器在同臺電腦上,對同一(yi)個庫進行(xing)操(cao)作(zuo)時,它不(bu)會提(ti)升(sheng)為分布式(shi)事務

當你的WEB服務器與數據庫服務器在同臺電腦上對于(yu)同一(yi)個(ge)庫,建立多個(ge)數據上下文時,它不會提升為分布式事務

當你的WEB服務器與數據庫服務器在同臺電腦上當你(ni)操作(zuo)兩個庫的(de)表,這(zhe)時才會提升為分布(bu)式事(shi)

當(dang)你(ni)的WEB服(fu)務(wu)器與(yu)數據(ju)庫服(fu)務(wu)器不在同臺(tai)電(dian)腦上如果建(jian)立多于一個Connection連接,將會發起(qi)MSDTC

三 反映到linq to sql中,對于一個數據上下文,由于我們操作不當,也會產生多個Connection連接

 

這個方(fang)(fang)法本(ben)身沒有問(wen)題,做(zuo)一件事件,而且職責很明確(que),當完成事情后,通過base.SubmitChange()方(fang)(fang)法提交到數(shu)據庫,這時,建立了connection,發送了sql語句,完成了這個通訊。

但有時,這種DAL層的動作需要被BLL層的業務進行組合,BLL層可以在一個事務范圍內調用多個類似的DAL方法,這時它們會把這種方法當成是分別獨立的工作單元,這是我(wo)們(men)(men)不希望(wang)看到的,因(yin)為(wei)在我(wo)們(men)(men)理(li)解(jie)中,一(yi)(yi)(yi)個(ge)BLL業務應(ying)該(gai)是一(yi)(yi)(yi)個(ge)工(gong)作單元才對,返回到代(dai)(dai)碼中應(ying)該(gai)是,多個(ge)DAL層的方法被(bei)解(jie)釋為(wei)SQL語句(ju)后(hou),提交一(yi)(yi)(yi)次就OK,所以,上面的代(dai)(dai)碼在進行組合后(hou),可能(neng)會產(chan)生一(yi)(yi)(yi)些壞(huai)味(wei)道!

解決方法:

向BLL層開放數據上下文的SubmitChanges()方法及是否提交的屬性IsSubmitChange,在BLL層統一做提交,而對于DAL層的獨立的方法,在進行submitChanges()時,需要進行判斷IsSubmitChange是否為true,如果是,然后再提交,當然這個IsSubmitChange默認為true,即每次調用單獨的方法都會完成這個提交,這是正常的,也符合操作的完整性,

而(er)在BLL進行組(zu)合方法時,先將必IsSubmitChange設為false,這時,DAL的方法將不會被提交,等待(dai)BLL的Submitchange()。

核心代碼:

提交屬性IsSubmitChange屬性默認為true

 

 

而對于BLL層(ceng),我們公開一個統一的操作對象,它會覆蓋掉基類的SubmitChanges方(fang)法(fa),它的方(fang)法(fa)修飾符為public,對BLL層(ceng)公開。

 BLL層的(de)基類BLLBase,可以通過架造方法為IsSutmitChange屬性賦值(zhi)

 

OK,到這里,我(wo)們的BLL無論是(shi)調(diao)用(yong)BLL其它(ta)業(ye)務(wu)組(zu)合,還是(shi)調(diao)用(yong)DAL層方法組(zu)合,都(dou)可(ke)以控制代碼(ma)何時(shi)去(qu)提交到數據庫了,對于(yu)一(yi)(yi)個(ge)業(ye)務(wu)對象,就應(ying)該是(shi)一(yi)(yi)個(ge)工作單元(yuan),呵呵。

回到目錄

 

posted @ 2013-03-06 10:56  張占嶺  閱讀(6058)  評論(1)    收藏  舉報