如何解决实体框架提供程序异常

Posted

技术标签:

【中文标题】如何解决实体框架提供程序异常【英文标题】:How do I solve The Entity Framework provider exception 【发布时间】:2016-05-16 18:11:59 【问题描述】:

我已经将我的 WCF 项目发布到服务器上,我还在使用 WCF 服务的同一个盒子上发布了一个 MVC 应用程序。

在我的 MVC 应用程序上尝试登录时,它使用了 wcf 服务,但我在浏览器上得到了这个异常,

实体框架提供程序类型 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' 在应用程序配置文件中注册 对于具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序 无法加载。确保程序集限定名称是 并且该程序集可用于正在运行的应用程序。

这是一个实体框架异常,但我假设由于我的项目已经在开发环境中引用了 EF,因此在部署服务项目后,DLL 也应该包含 EF 引用,但我不确定为什么会出现此错误。

我可以看到这条消息是因为我打开了includeExceptionDetailInFaults="True"

【问题讨论】:

从 NuGet 包管理器安装导致项目中未正确安装。再试一次 PM> Install-Package EntityFramework 正如我所提到的,这不在我的本地机器上,这是在我没有安装 Visual Studio 的服务器上。这是一个抛出此错误的已发布应用程序,它在我的本地计算机上运行良好。 @NazmulHasan 删除 bin 文件夹并清理/重建您的解决方案,正如我在 my answer to another similar question 中所建议的那样。 相关帖子 - Entity Framework Provider type could not be loaded? 【参考方案1】:

@FranciscoGoldenstein 说!您不需要在控制台应用程序中安装 Entity Framework 或其他任何东西,您只需要添加对程序集 EntityFramework.SqlServer.dll 的引用。您可以将此程序集从使用实体框架的类库项目复制到 LIB 文件夹并添加对它的引用。

总结:

类库应用程序: 安装实体框架 编写数据层代码 app.config 文件包含与实体框架相关的所有配置,但连接字符串除外。 创建控制台、Web 或桌面应用程序: 添加对第一个项目的引用。 添加对 EntityFramework.SqlServer.dll 的引用。 app.config/web.config 有连接字符串(请记住,配置条目的名称必须与 DbContext 类的名称相同。

这对我有用!希望对你有帮助。

也可以试试这个链接Entity Framework Provider type could not be loaded?

【讨论】:

你是对的,出于某种原因,当我出于某种原因发布它时,构建没有添加该库。【参考方案2】:

解决此问题的最简单方法是在您的 EF 项目的一个类中添加以下行:

public class Blablabla

    private static string __hack = typeof(SqlProviderServices).ToString();

    // other class members as they were before.

这将强制构建过程将 EntityFramework.SqlServer.dll 复制到任何引用 EF 项目的项目的 \bin 文件夹中。

无需在任何下游项目中安装 EF nuget 包或显式引用 EntityFramework.SqlServer.dll。

【讨论】:

这是一个绝妙的技巧,避免了手动添加EntityFramework.SqlServer.dll【参考方案3】:

卸载 Entity Framework nuget 并重新安装,对我有用。

【讨论】:

【参考方案4】:

我也有类似的问题

通过执行以下操作解决了我的问题:

【讨论】:

【参考方案5】:

也许有些愚蠢,但供将来参考:

就我而言,我正在使用单元测试。我将配置添加到 app.config,但从未将实体框架安装到单元测试项目中。 安装后,到目前为止一切顺利。

【讨论】:

以上是关于如何解决实体框架提供程序异常的主要内容,如果未能解决你的问题,请参考以下文章

如何解决实体框架打开 DataReader 问题

如何解决空数据库表上的乐观并发异常错误

从空列返回实体后出现空指针异常

在实体框架中找出导致异常的确切实体

如何在两个应用程序之间共享实体框架?

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段