原創(chuàng)|使用教程|編輯:龔雪|2014-01-23 09:16:48.000|閱讀 204 次
概述:Linq to SQL Profiler是由以色列著名公司Hibernating Rhinos開發(fā)出來的數(shù)據(jù)庫(kù)工具。并且該軟件是由 OR/M 社區(qū)的高層領(lǐng)導(dǎo)人親自開發(fā)設(shè)計(jì),能夠精準(zhǔn)的幫助優(yōu)化App的冗余的代碼。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
Linq to SQL Profiler強(qiáng)烈不建議在同一個(gè)請(qǐng)求里寫多個(gè)datacontext,這樣會(huì)對(duì)數(shù)據(jù)庫(kù)造成不好的影響。
首先每一個(gè)單獨(dú)的datacontext都會(huì)用到一個(gè)單獨(dú)的數(shù)據(jù)庫(kù)連接。同一個(gè)請(qǐng)求里有多個(gè)datacontext存在的話就意味著需要多個(gè)數(shù)據(jù)庫(kù)連接,這樣會(huì)影響到系統(tǒng)總體性能,并且給數(shù)據(jù)庫(kù)增壓。
其次,使用多個(gè)datacontext也意味著我們無法使用數(shù)據(jù)庫(kù)內(nèi)置的事務(wù)支持功能,而是依賴于系統(tǒng),但是系統(tǒng)在事務(wù)方面的效率要慢得很多。
再者,我們不能依賴于數(shù)據(jù)庫(kù)來保證查看數(shù)據(jù)的事務(wù)安全,因?yàn)槲覀兪褂玫氖嵌鄠€(gè)不同的事務(wù)來訪問數(shù)據(jù)庫(kù)。即使是使用系統(tǒng)事務(wù)時(shí)也是同樣的道理。當(dāng)在使用系統(tǒng)事務(wù)時(shí),它會(huì)強(qiáng)迫我們使用DTC來保證所有的sessions都在同一個(gè)事務(wù)里,而DTC則會(huì)導(dǎo)致系統(tǒng)性能變差。
請(qǐng)參考下面一段代碼,這是在單個(gè)的操作里包含了多個(gè)datacontext:
public void TransferMoney(Account from, Account to, Money amount) { Dao.Withdraw(from, amount); Dao.Deposit(to, amount); } public void Withdraw(Account account, Money amount) { using(var ctx = new MyBankContext()) { account.MoenyAmount -= amount; ctx.Accounts.Attach(account); ctx.SaveChanges(); } } public void Deposit(Account account, Money amount) { using(var ctx = new MyBankContext()) { account.MoenyAmount += amount; ctx.Accounts.Attach(account); ctx.SaveChanges(); } }
在這個(gè)示例中,我們需要對(duì)數(shù)據(jù)庫(kù)進(jìn)行兩次調(diào)用:兩個(gè)不同的datacontext各調(diào)用一次。因此,我們無法使用數(shù)據(jù)庫(kù)自帶的事務(wù)支持功能:由于兩次調(diào)用是發(fā)生在不同的事務(wù)中。
所以,要想解決這種問題的辦法就是:在一個(gè)請(qǐng)求里只使用一個(gè)datacontext。
>>歡迎點(diǎn)此免費(fèi)下載和試用Linq to SQL Profiler
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn