2013-05-10 169 views
2

關於使用Entity Framework 5,我有一個非常快速的問題。許多人可能知道爲什麼我們需要使用下面顯示的代碼。但是,我想將這個邏輯分成不同的層,我不想在我的Web層中引用實體框架DLL,因此我最終將這些代碼放入了我的DbContext類的靜態構造函數中。Database.SetInitializer()在靜態構造函數中?

這是一個壞主意嗎?這樣做會不會對應用程序造成影響?

Database.SetInitializer<DataContext<T>>(null); 

在此先感謝,Onam。

回答

4

沒有值得提及的性能問題。爲應用程序調用一次靜態構造函數,並創建第一個類實例。我在大多數應用程序中這樣做,並沒有發現任何問題。

您也可以通過數據層的靜態方法調用此行,而不必在調用Web層組件中引用EF。

我相信這一行只設置了初始化程序的內部引用,並且不會做任何昂貴的操作。昂貴的工作 - 發現並構建EF模型 - 在使用第一個上下文實例時完成。

附註:在應用程序啓動時進行這種昂貴的工作有時可能是需要的,以便在應用程序的一開始就有延遲,並避免在用戶運行第一個查詢時應用。爲了強制初始化,您不但要設置初始化器,還要運行初始化本身,例如如下所示:

Database.SetInitializer<DataContext>(null); 
using (var context = new DataContext()) 
{ 
    context.Database.Initialize(false); 
}