2013-05-06 94 views
2

我一直在我的數據訪問層以下一種代碼設置的(由例如)LINQ to SQL和打開的連接

public static class LoadData 
{ 
    private static SomeDataContext db = new SomeDataContext(); 

    public static void LoadData(DropDownList ddl) 
    { 
    (from ls in db.MyLookup 
    select ls).OrderBy(ls=>ls.theId).ToList() 
    .ForEach(ls=>ddl.Items.Add(new ListItem(ls.theText, ls.theValue.ToString()))); 
    } 
} 

是DataContext的「智能」,足以清理後本身還是應該我用using聲明包裝我的查詢以確保連接已關閉?

+1

不相關,但如果您要在ASP.Net應用程序的任何位置調用它,您肯定不希望將DataContext保留在靜態字段中。 DataContext的不是線程安全的(因爲基本的sql連接/命令/讀取器類不是線程安全的)。 – rossisdead 2013-05-06 15:40:28

回答

2

在訪問數據庫時,至少應該使用using塊。數據上下文不會自動打開和關閉您的連接。你仍然對你的資源負責。

如果您需要使用單個連接(相關數據等)多次訪問數據庫,則可能需要查看使用工作單元模式。

-1

是DataContext的「智能」,足以清理後本身

數據上下文的設計在一個小範圍內使用;單一交易的情況。因此,他們不會釋放他們的任何資源,直到您將其處理掉並允許該對象超出範圍。在整個應用程序中使用單個上下文會導致消耗大量資源(包括網絡連接以及內存(託管和非託管))。

您應該爲每個LoadData調用創建一個新的數據上下文,並將上下文包裝到using中,以確保在每次調用之後妥善處理它。

As noted in comments數據上下文也不是線程安全的,所以這是另一個不會在多個邏輯事務中重複使用相同上下文的原因。