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

问题描述 投票:12回答:5

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

在我的MVC应用程序上尝试登录时,这会使用wcf服务,但我在浏览器上遇到此异常,

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

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

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

c# asp.net-mvc entity-framework wcf publish
5个回答
15
投票

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

综上所述:

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

这对我有用!我希望它有所帮助。

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


3
投票

卸载Entity Framework nuget并重新安装,为我工作。


3
投票

解决此问题的最简单方法是在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
投票

我也有类似的问题

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

enter image description here

enter image description here


0
投票

正如我在my answer to another similar question中建议的那样,删除bin文件夹并清理/重建您的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.