【问题标题】: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 类型吗?这是一个示例:stackoverflow.com/questions/8215773/…
  • 我看到那个帖子并试图模仿它但没有成功
  • 想想看,你应该小心最新的编辑。它改变了问题,现在可能应该是一个新问题(您可能想在其中提供您当前的CUSTEntities1

标签: c# entity-framework linq linq-to-sql


【解决方案1】:

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

查询需要以

开头
from customer in context.Customers

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

【讨论】:

  • 我试过了,但是 a.Customers 对我不可用。
  • @Missy 你是如何创建模型的?
  • 是的——我使用的是数据库优先方法。我不明白为什么客户对我不可用。您对变量名称的建议很好。
  • @Missy 在这种情况下,您可能想要重新创建模型(只是为了确保context.Customer 也不可用?)
  • 好的。我去做。 Context.Customer 也不可用 - 正确。
猜你喜欢
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
  • 2021-12-25
  • 2013-03-17
  • 2014-02-24
  • 1970-01-01
相关资源
最近更新 更多