如何解决Entity Framework提供程序异常问题

16

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

当尝试登录我的MVC应用程序时,它会使用一个WCF服务,但是我在浏览器上收到了以下异常:

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

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

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


1
从NuGet包管理器安装导致项目未正确安装。请再试一次 PM> Install-Package EntityFramework - Nazmul Hasan
1
就像我之前提到的那样,这不是在我的本地机器上,而是在我没有安装 Visual Studio 的服务器上。这是一个发布的应用程序抛出的错误,在我的本地机器上运行良好。@NazmulHasan - floormind
删除bin文件夹并清理/重建您的解决方案,正如我在另一个类似问题的答案中所建议的那样。 - Ulysses Alves
5个回答

18
@FranciscoGoldenstein说!你不需要在控制台应用程序或其他地方安装Entity Framework,只需要添加对EntityFramework.SqlServer.dll程序集的引用。您可以从使用Entity Framework的类库项目中复制此程序集到LIB文件夹并添加引用。
总结一下:
Class Library应用程序:
- 安装Entity Framework - 编写数据层代码 - app.config文件包含与Entity Framework相关的所有配置,除了连接字符串。
创建控制台、Web或桌面应用程序:
- 添加对第一个项目的引用。 - 添加对EntityFramework.SqlServer.dll的引用。 - app.config/web.config具有连接字符串(记住,配置条目的名称必须与DbContext类的名称相同)。
这对我很有效!希望它能帮助到你。
还可以尝试此链接Entity Framework Provider type could not be loaded?

你是对的,由于某些原因,在我发布时构建没有添加那个库。 - floormind

4
最简单的解决方法是在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。

1
这是一个很棒的技巧,避免了手动添加 EntityFramework.SqlServer.dll 的烦恼。 - user692942

3

卸载 Entity Framework nuget,然后重新安装,这个方法对我有效。


1
我也曾遇到类似的问题。
我的问题通过以下方法得以解决:

enter image description here

enter image description here


0
也许这是一些愚蠢的事,但是为了以后的参考:
在我的情况下,我正在使用单元测试。我将配置添加到了 app.config 中,但从未在单元测试项目中安装 Entity Framework。
安装后,一切都很好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接