2011-06-21 69 views
18

我遇到了一些性能問題與我的實體框架代碼優先查詢,我相信預編譯可能是答案。如果我使用的是「正常」實體框架,那麼我會簡單地使用CompiledQuery.Compile方法來預編制我的查詢。但由於我有一個DbContext而不是一個ObjectContext,我無法得到這個工作。我知道DbContext是IObjectContextAdapter,它允許我訪問ObjectContext,但我找不到讓我從我的對象上下文中獲取IQueryable的方法,該方法在我的預編譯查詢中工作。我試圖使用CreateObjectSet,但是當EF試圖運行查詢時,它抱怨說它無法將該方法轉換爲SQL。如何預編譯實體框架代碼 - 第一個查詢?

那麼預編譯代碼優先DbContext的LINQ查詢的最佳方式是什麼?

回答

8

由於從官方announecment:

「從的DbContext 沒有編譯的查詢支持,遺憾的是由於我們在.NET Framework 4.0中附帶的編譯查詢功能的一些技術限制,我們無法支持通過編譯查詢DbContext API。我們意識到這是一個痛苦的限制,並且將爲下一版本啓用此功能。「

Link

11

這可能會在 EFv4.2 EF vNext(目前位於very first CTP)被auto-compiled LINQ queries解決。

+0

這意味着它只能在.NET 4.5上使用?還是會在EF4.3中發佈? –

+3

@Nelson:僅在.NET 4.5中 –

+2

是的,它在實體框架5及以上版本中解決。 –