如何将此实体框架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