实体框架“找不到查询模式的实现”

Posted

技术标签:

【中文标题】实体框架“找不到查询模式的实现”【英文标题】:Entity Framework "Could not find an implementation of the query pattern" 【发布时间】:2017-10-22 09:41:04 【问题描述】:

我正在尝试使用实体框架,但我不断收到错误消息“底层提供程序在打开时失败。”。我将密码存储在 getConnectionString 函数的代码中,提供了一个有效的连接字符串,我知道它可以工作,因为我始终使用该函数(尽管在我的非实体框架程序中)。我在 Model1 文件中定义了客户。客户是一个数据库。

// gets valid connection string
string cs = getConnectionString();

var entityConnectionStringBuilder = new EntityConnectionStringBuilder();
entityConnectionStringBuilder.Provider = "System.Data.SqlClient";
entityConnectionStringBuilder.ProviderConnectionString = cs;
entityConnectionStringBuilder.Metadata = "res://*";


CUSTEntities1 CustContext = new  CUSTEntities1(entityConnectionStringBuilder.ToString());

var q = (from i in CustContext.Customers
         where i.CustLen == 15
         select new CustomerClass
         
            fid1 = i.fid1,
            fid21 = i.fid2,
            custlen = (int)i.CustLen
          ).ToList<CustomerClass>();

我是 Entity Framework 的新手,正在尝试制作一个简单的测试应用程序来帮助我理解它。任何帮助将不胜感激。我从头开始重建项目,以确保我拥有 EF 所需的所有部件。

【问题讨论】:

“客户”是 IEnumerable 类型吗?这是一个示例:***.com/questions/8215773/… 我看到那个帖子并试图模仿它但没有成功 想想看,你应该小心最新的编辑。它改变了问题,现在可能应该是一个新问题(您可能想在其中提供您当前的CUSTEntities1 【参考方案1】:

您应该从上下文中查询,EF 不知道如何单独处理该类。

查询需要以

开头
from customer in context.Customers

由于您似乎使用的是模型优先或数据库优先的方法,因此上下文应该已经包含一个 DbSet。在您的情况下,它位于CUSTEntities1

【讨论】:

我试过了,但是 a.Customers 对我不可用。 @Missy 你是如何创建模型的? 是的——我使用的是数据库优先方法。我不明白为什么客户对我不可用。您对变量名称的建议很好。 @Missy 在这种情况下,您可能想要重新创建模型(只是为了确保context.Customer 也不可用?) 好的。我去做。 Context.Customer 也不可用 - 正确。

以上是关于实体框架“找不到查询模式的实现”的主要内容,如果未能解决你的问题,请参考以下文章

在 IEnumerable<T> 上找不到查询模式的实现

找不到实体框架 6 的兼容提供程序

Visual Studio 找不到实体框架

实体框架 enable-migrations 在程序集中找不到上下文类型

实体框架 EF4.1 - 存储过程“在容器中找不到”

错误:找不到具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序