Ali*_*khi 4 .net wcf entity-framework winforms
我使用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.
有什么建议?
Rez*_*aei 12
您不需要在客户端应用程序中安装EF6 NuGet包,该错误与客户端应用程序无关,因为客户端应用程序连接到WCF服务,即使存在数据库或数据访问层也不知道.
此错误与EntityFramework.SqlServer.dll服务库和/或主机项目的bin文件夹中缺少有关.
选项1
最简单的方法是在WCF主机项目中使用NuGet Package Manager安装EF6,如果以前安装过,请尝试卸载并再次安装.这种方式EntityFramework.SqlServer.dll输出直销.
请注意,这种方式是针对n层规则的,因为这个数据访问层上面的库依赖于EF6,这不是很好.
选项2
作为EntityFramework.SqlServer.dll在输出目录中复制的变通方法,请确保Copy Local将此dll设置为true,然后将此代码放在DbContext构造函数中:
var ensureDllIsCopied = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
Run Code Online (Sandbox Code Playgroud)
它确保EntityFramework.SqlServer.dll被复制到数据访问项目的cunsumers的输出目录.这是一种解决方法.
使用这种方式,您在数据访问层上方的层中不依赖于EF.
小智 8
许多人报告在使用 EF 6 和 Code First 时存在一个问题,即 EntityFramework.SqlServer 提供程序(或他们正在使用的其他提供程序)未在本地复制。这会导致以下错误:
System.InvalidOperationException:无法加载在具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序的应用程序配置文件中注册的实体框架提供程序类型“System.Data.Entity.SqlServer.SqlProviderServices、EntityFramework.SqlServer” 。确保使用程序集限定名称并且该程序集可供运行的应用程序使用。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=260882 。
仅当 EntityFramework NuGet 包未安装在启动项目中时才会发生这种情况(即仅安装在类库等中)
此问题并非实体框架特有的,而是 MSBuild 如何确定需要部署哪些程序集的副作用。出现此问题的原因是应用程序中没有显式引用 EntityFramework.SqlServer.dll(或相关提供程序程序集)中的类型的代码,因为 EF 将根据 App/Web.config 文件中的信息在运行时加载程序集。因此,MSBuild 不会检测到需要该程序集,并且不会将其复制到输出目录
我通过在 WCF 主机站点中安装实体框架解决了这个问题。
那行得通。
| 归档时间: |
|
| 查看次数: |
17521 次 |
| 最近记录: |