如何解决实体框架提供程序异常
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,但从未将实体框架安装到单元测试项目中。 安装后,到目前为止一切顺利。
【讨论】:
以上是关于如何解决实体框架提供程序异常的主要内容,如果未能解决你的问题,请参考以下文章