如何将此Entity Framework LINQ查询编写为编译查询?
var context = new SlxDbContext();
var userSet = context.Set<User>();
User user = userSet.Where(x => x.UserName == "gstrader").First();
答案 0 :(得分:5)
当您使用DbContext API时,无法使用CompiledQuery; CompiledQuery仅适用于ObjectContext。如果您使用的是Code First,则最有可能使用DbContext API。 Microsoft建议您在新项目中使用DbContext API,即使您将使用Database First或Model First模型。
但是如果你使用 EF5 ,它会带来自动编译的查询,它的工作方式与CompiledQuery完全不同。 EF5不是编写代码来编译每个查询,然后根据需要调用每个查询,而是将生成的SQL作为后台进程缓存,然后在执行任何查询时在缓存中搜索已编译的查询。
请参阅:
和
http://www.devproconnections.com/article/entity-framework/entity-framework-5-143875
答案 1 :(得分:2)
不幸的是,您使用的EF版本(代码优先),不支持已编译的查询。
如果我错了,请纠正我。
一些链接:
How do I precompile an Entity Framework Code-First Query?
EF Code First DbContext and Compiled Queries
更新:
以下是编译查询的示例,但我认为它不适用于Code First:
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()
);