如何预编译实体框架代码优先查询?

Joh*_*soe 18 entity-framework ef-code-first entity-framework-4.1

我在实体框架代码优先查询中遇到了一些性能问题,我相信预编译可能就是答案.如果我使用"普通"实体框架,我只需使用CompiledQuery.Compile方法预先查询我的查询.但由于我有一个DbContext而不是ObjectContext,我无法让它工作.

我确实认识到DbContext是一个IObjectContextAdapter,它允许我访问ObjectContext,但我找不到让我从我的预编译查询中运行的对象上下文中获取IQueryable的方法.我试图使用CreateObjectSet,但是当EF试图运行查询时,它抱怨它无法将该方法转换为SQL.

那么针对Code-First DbContext预编译LINQ查询的最佳方法是什么?

Lad*_*nka 11

这可能是通过自动编译的LINQ查询EFv4.2 EF vNext(目前在第一个CTP中)中解决的.

  • @Nelson:仅限.NET 4.5 (3认同)
  • 是的,它已在实体框架5及更高版本中解决. (2认同)
  • @billy:不.目前它只适用于.NET 4.5,但你可以使用[this](http://blog.oneunicorn.com/2012/10/05/ef-enums-and-spatial-types- on-net-4 /)在.NET 4.0中使用它. (2认同)

Ben*_*nyM 8

从官方公告来看:

"没有来自DbContext的编译查询支持不幸的是由于我们在.NET Framework 4.0中提供的编译查询功能中的一些技术限制,我们无法通过DbContext API支持编译查询.我们意识到这是一个痛苦的限制,并将努力实现这一点下一个版本."

链接.