2013-03-05 171 views
3

使用EF 4.1,您用於刪除IncludeMetadataConvention以防止EF在每個查詢上查詢數據庫元數據。阻止實體框架5查詢Information_Schema_Tables

在EF 5中,我收到了關於IncludeMetadataConvention過時的警告,在LinqPad中,我可以看到EF現在正在查詢每次使用時的遷移歷史記錄。我正在研究數據庫第一個項目(但使用POCO和DbContext)。我不希望這些額外查詢的開銷。我如何關閉它們?

更新 我發現我可以在每個的DbContext基礎上禁用此調用

System.Data.Entity.Database.SetInitializer<theDbContext>(null); 

不過,我想能夠全局禁用初始化(想象一下,一個大的應用程序,我們希望確保我們在部署生產時不會運行這些查詢(並且絕對不會嘗試創建數據庫)

回答

2

如果您需要在大型應用程序中爲每種上下文類型執行此操作,則可以創建一些代碼這將通過你所有的程序集,找到從DbContext派生的所有類型,並通過反射爲每個找到的類型調用該調用。

Btw。因爲EF 4.3你也可以change initializer from configuration,但它仍然是每個環境的基礎,因爲人們通常沒有多於一個。

+0

好吧,現在你已經很好奇了。這是否意味着人們通常只是拖回看起來完全像他們的桌子的物體?我一直在大型應用程序中使用每個模塊的上下文,作爲根據模塊使用方式對同一表進行不同預測的方式。 – JMarsch 2013-03-05 19:46:19

+0

一般是的。你總是可以直接在linq查詢中執行投影。 – 2013-03-05 20:37:13

1

爲什麼不把代碼放在DbContext類的構造函數中?

我這樣做,以及設置一個參數來禁用AutoDetectChangesEnabled,LazyLoading & Proxy CreationEnabled。