如何將此實體框架LINQ查詢編寫爲編譯查詢?實體框架編譯查詢
var context = new SlxDbContext();
var userSet = context.Set<User>();
User user = userSet.Where(x => x.UserName == "gstrader").First();
如何將此實體框架LINQ查詢編寫爲編譯查詢?實體框架編譯查詢
var context = new SlxDbContext();
var userSet = context.Set<User>();
User user = userSet.Where(x => x.UserName == "gstrader").First();
不幸的是EF的版本使用的是(代碼首先),不支持編譯查詢。
如果我錯了,請糾正我。
一些鏈接:
How do I precompile an Entity Framework Code-First Query?
EF Code First DbContext and Compiled Queries
UPDATE:
這裏是編譯查詢的樣本,但我認爲它不會與代碼工作第一批:
public static Shop CompiledGetShopById(Guid shopId)
{
using (DataContext dtx = new DataContext(ConfigProvider.ConnectionString)) {
return Compiled_GetById.Invoke(dtx, shopId);
}
}
private static Func<DataContext, Guid, Shop> Compiled_GetById =
Objects.CompiledQuery.Compile<DataContext, Guid, Shop>(
(DataContext db, Guid shopId) =>
(from item in db.Shops where item.ShopId == shopId)
.FirstOrDefault()
);
當您使用DbContext API時,無法使用CompiledQuery; CompiledQuery僅適用於ObjectContext。如果您使用的是Code First,則很可能使用DbContext API。而且,即使您將使用Database First或Model First模型,Microsoft建議您在新項目中使用DbContext API。
但是如果你使用EF5,它帶來自動編譯查詢,這工作比CompiledQuery非常不同。而不是編寫每個查詢的編寫代碼,然後根據需要調用每個查詢,EF5會將生成的SQL緩存爲後臺進程,然後在執行任何查詢時搜索緩存中已編譯的查詢。
參見:
和
http://www.devproconnections.com/article/entity-framework/entity-framework-5-143875
對於不是代碼的EF5可以使用由DbContext包裝的底層ObjectContext來使用CompiledQuery? – 2014-02-24 23:12:52
有什麼辦法如何使財產的所有實體,不只是實體店通用Compiled_GetById?這將幫助我很多,謝謝:) – 2013-10-20 12:07:37