2013-06-26 15 views
0

對於我有的類,我注意到我基本上必須對類中的每個函數使用以下方案。這是低效的嗎?有沒有更好的利用DataContext對象?許多DataContext單例在類中執行LINQ

using (var context = new SomeDataContext(getConnectionString)) 
{ 
    //linq query here 
} 
+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

@Dan:正確的鏈接是http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx。請不要發佈鏈接到舊版本的.NET文檔。 –

+0

@JohnSaunders謝謝你指出。我粗心。這不是故意的。感謝您提供正確的。 – Dan

回答

2

它被設計用於你提到的方式。每次在數據庫上執行操作時,都應該創建一個新的上下文。正如@丹指出的那樣,創建一個上下文非常快速和高效。

0

這是一種正確和正確的方法,因爲它確保您通過將其置於using子句中來處理連接。實例化一個DBContext並不昂貴。

這就是說,每次查詢數據庫並立即處理它時,都會創建一個DBContext,因此您沒有充分利用DbContext類提供的緩存和其他細節。

一個「廉價和骯髒」的方式來創建每個請求唯一的DbContext將一個實例上Application_BeginRequest並將其存儲在HttpContext.Items集合(基本上是一個臨時緩存)在和它Application_EndRequest處置。然後,項目中的每個課程將從HttpContext.Items緩存中獲取當前的DBContext並使用它。由於Application_EndRequest始終會發生錯誤,因此連接將被妥善處置。

更好的選擇是使用依賴注入框架(結構圖,Ninject等)您可以谷歌教程如何做到這一點。如果您有興趣實施它,SO有幾個問題可以幫助您。

個人注意事項:除非您注意到您的應用運行速度太慢而無法接受,否則不要擔心這些內容。你目前的做法很好。