编写编译的LINQ查询时出错

时间:2014-04-29 12:59:01

标签: linq entity-framework

我尝试编写编译查询,如下所示:

public static Func<MyDBEntities, string, List<Client>> getCustomers =
CompiledQuery.Compile(
(MyDBEntities ctx, string strCustCode) => from objCustomer in ctx.Clients
     select objCustomer);

并收到以下错误消息:

  

创建一个代表符合LINQ to Entity查询的新委托

     

错误:

     

没有从MyDBEntities到System.Data.Objects.ObjectsContext的隐式引用转换

我在这个项目中使用DbContext。

没有理解错过了什么。

1 个答案:

答案 0 :(得分:1)

当您使用DbContext API时,无法使用CompiledQuery; CompiledQuery仅适用于ObjectContext。如果您使用的是Code First,则最有可能使用DbContext API。 Microsoft建议您在新项目中使用DbContext API,即使您正在使用Database First或Model First模型。

但是如果你使用EF5,它会带来自动编译的查询,它与CompiledQuery的工作方式完全不同。 EF5不是编写代码来编译每个查询,然后根据需要调用每个查询,而是将生成的SQL作为后台进程缓存,然后在执行任何查询时在缓存中搜索已编译的查询。

请参阅:

http://blogs.msdn.com/b/adonet/archive/2012/02/14/sneak-preview-entity-framework-5-0-performance-improvements.aspx

http://www.devproconnections.com/article/entity-framework/entity-framework-5-143875

取自:Entity Framework Compiled Query