无法让实体框架连接

Posted

技术标签:

【中文标题】无法让实体框架连接【英文标题】:Can't get Entity Framework to connect 【发布时间】:2012-12-11 03:10:01 【问题描述】:

我收到以下错误:

指定的命名连接要么在配置中找不到,要么不打算与 EntityClient 提供程序一起使用,要么无效。

我刚刚创建了我的第一个 EF 项目。这是一个 MVC 应用程序,我在 MVC 项目中添加了实体模型。我还添加了一个 DataAccess 类和一个使用 NUnit 运行测试的类。最后,我将添加一个引用 DataAccess 类的服务类。所以,代码目前看起来像这样(我只是想进行一个测试来证明 EF 正在做它的事情):

Text Fixture 调用 DataAccess 类 DataAccess 类调用实体框架 实体框架访问本地数据库

目前,我只是想从一张表中返回所有行/一列。请记住,所有这些文件都在一个项目中。我读了很多书,这个问题源于多个项目,但这似乎不适用于我的情况。我已经检查了“主要”web.config 文件。连接字符串看起来没问题。我也将相同的配置部分(即connectionStrings)复制到特定于调试的配置文件中,但这并没有什么不同。任何想法为什么我会看到此错误?

谢谢, 周杰伦

连接字符串:

这是创建实体访问文件时对话框中的连接字符串(数据源是两个字符串中的句点[即本地主机]):

metadata=res:///EntityDataModel.csdl|res:///EntityDataModel.ssdl|res://*/EntityDataModel.msl;provider=System.Data.SqlClient;provider 连接字符串=“数据源=.;初始目录=URIntake;集成 安全=真”

这是来自 web.config 文件的连接字符串。出于所有实际目的,它们看起来都是一样的:

metadata=res:///EntityDataModel.csdl|res:///EntityDataModel.ssdl|res://*/EntityDataModel.msl;provider=System.Data.SqlClient;provider 连接字符串=“数据源=.;初始 目录=URIntake;集成 security=True;multipleactiveresultsets=True;App=EntityFramework"

【问题讨论】:

【参考方案1】:

Microsoft Zlatko Michailov 说,

app.config 不在 exe 所在的二进制目录中。请做 以下:

    目视验证具有预期内容的 app.config 是否在编译 exe 的目录中。 (项目中存在 根目录是不够的。)

    在您的应用中使用 System.Configuration.ConfigurationManager 来检查您的 exe 正在使用的 app.config 的内容。

我也在看连接字符串的内容,我可以说 它可能无法在多项目环境中工作(除非你已经 在每个项目中复制 EDM)。

原因是“。” 解析为加载 exe 的目录。如果你想 重复使用相同的 EDM,您至少必须在 路径,然后导航到 EDM 所在的项目,例如 “......\Proj1\AdventureWorksModel”。

另外你可以考虑 使用 |DataDirectory|宏 - 当您加载 AppDomain 时,您可以 设置 |数据目录|指向 EDM 所在的确切目录, 然后在连接字符串中使用它,例如 “|数据目录|\AdventureWorksModel”。

如果你正在做一个 ASP.NET 项目,可以使用“~”表示项目根目录。在 在后一种情况下,您不能引用项目之外的模型 层次结构。

欲了解更多信息Check Here

更新 1:

您可以在这里尝试以下提到的步骤

    清除 web.config 文件中的连接字符串内容,如下所示

    然后从您的项目中删除您的 *.edmx 文件

    重新创建如下(示例一)。不要忘记勾选“将 web.config 中的实体连接设置保存为:”

最后一步: 之后转到 web.config 文件 并检查您的连接字符串是否与显示的完全相同"Entity Connection String :" 上如上步骤(我在上图中的红色标记上显示它)。

希望对你有帮助。

【讨论】:

MVC 应用程序是否有 app.config 文件?我在哪里可以找到它?我编译了应用程序,然后进行了搜索,没有看到 app.config 文件。 @birdus 你能把关于你的项目树的小图片放在上面的帖子上吗? @birdus 查看我的更新 1 部分了解更多详情 我在上面的问题中添加了两个连接字符串。尝试您的建议后,我仍然遇到同样的错误。 @birdus 没有区别,就像';multipleactiveresultsets=True;App=EntityFramework"'。所以尝试用自动生成的一个替换web.config文件conn。不要保留多个conn 在您的 web.config 中(暂时)。

以上是关于无法让实体框架连接的主要内容,如果未能解决你的问题,请参考以下文章

实体框架 MySQL DbContext 无法连接

无法让简单的实体框架空间查询工作

无法为实体框架6使用MySQL连接

无法将实体框架与 MySQL 一起使用

MySQL 实体框架:无法创建索引

如何确定实体框架是不是正在等待来自连接池的连接?