无法加载实体框架提供程序类型'System.Data.Entity.SqlServer.SqlProviderServices,EntityFramework.SqlServer'

问题描述 投票:3回答:3

我使用dotNet 4.5创建了一个WCF服务。数据库层使用Entity Framework 6构建。

我用IIS 8托管了这项服务。它工作正常。

现在我需要使用使用dotnet framework 3.5构建的Windows窗体客户端来使用该服务。

我可以成功创建服务引用。但是当我运行代码时,出现以下错误;

无法加载在具有不变名称“System.Data.SqlClient”的ADO.NET提供程序的应用程序配置文件中注册的实体框架提供程序类型“System.Data.Entity.SqlServer.SqlProviderServices,EntityFramework.SqlServer”。确保使用了程序集限定名称,并且程序集可供正在运行的应用程序使用。有关更多信息,请参阅http://go.microsoft.com/fwlink/?LinkId=260882

有什么建议?

.net winforms entity-framework wcf
3个回答
10
投票

您不需要在客户端应用程序中安装EF6 NuGet包,该错误与客户端应用程序无关,因为客户端应用程序连接到WCF服务,即使存在数据库或数据访问层也不知道。

此错误与服务库和/或主机项目的bin文件夹中缺少EntityFramework.SqlServer.dll有关。

选项1

最简单的方法是在WCF主机项目中使用NuGet Package Manager安装EF6,如果以前安装过,请尝试卸载并再次安装。这样EntityFramework.SqlServer.dll输出directoories。

请注意,这种方式是针对n层规则的,因为这个数据访问层上面的库依赖于EF6,这不是很好。

选项2

作为在输出目录中复制EntityFramework.SqlServer.dll的解决方法,请确保将此dll的Copy Local设置为true,然后将此代码放在DbContext构造函数中:

var ensureDllIsCopied = System.Data.Entity.SqlServer.SqlProviderServices.Instance; 

它确保qazxsw poi被复制到数据访问项目的消费者的输出目录。这是一种解决方法。

使用这种方式,您在数据访问层上方的层中不依赖于EF。


1
投票

我通过在WCF主机站点中安装实体框架来解决此问题。

那很有效。


0
投票

很多时候,当您收到无法加载DLL的错误时,这是​​由于依赖性问题。

如果您尝试在客户端中使用或执行EF的任何部分,那么这可能是个问题。如果您的客户只使用POCO,那么您的客户端所针对的.NET版本无关紧要。

EF 6.1.3将安装在.NET 3.5项目中,但不会运行。支持.NET 3.5的唯一EF版本是v1。 EF 6及更高版本仅支持.NET 4和4.5。

有许多功能需要.NET 4及更高版本(例如异步)

您可以查看EF的版本历史记录,以查看以下链接中每个版本的目标:

EntityFramework.SqlServer.dll

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