[英]Entity Framewok Code First “ADO.NET provider not found” with local SQL Server CE DLL's
我正在编写一个使用SQL Server CE 4.0文件的C#应用程序,这些文件可以通过代码优先通过Entity Framework 6.0访问。 (应用程序需要能够使用本地dll进行SQL Server CE连接,即应用程序需要可以部署XCOPY)。 应用程序在我的开发机器上运行正常,但在其他机器上(例如只有Win7和.NET 4.0的VM),我得到一个ArgumentException
:
具有不变名称“System.Data.SqlServerCe.4.0”的ADO.NET提供程序未在计算机或应用程序配置文件中注册,或者无法加载。 有关详细信息,请参阅内部异常
内部异常消息说:
无法找到请求的.Net Framework数据提供程序。 它可能没有安装。
我搜索过Google和SO,大多数评论表明确保App.config文件正确无误。 我相信我的(默认连接工厂和提供商部分),但这里是内容:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
<parameters>
<parameter value="System.Data.SqlServerCe.4.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />
</providers>
</entityFramework>
</configuration>
build文件夹包含以下文件(当然还有特定于应用程序的文件):
在每个amd64和x86子文件夹中都有以下文件:
我确定该程序在开发机器上运行,因为已经安装了SQL Server CE,但是如何在其他机器上使用本地SQL Server CE dll来运行它?
见http://tech.aendeavors.com/2011/06/09/bin-deploy-sqlce-4-0-and-ef-4-1/
您可能缺少的相关内容似乎是:
确保引用System.Data.SqlServerCe并在属性中将其设置为“Copy local”。
将以下内容添加到app.config:
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SqlServerCe.4.0" />
<add name="Microsoft SQL Server Compact Data Provider 4.0"
invariant="System.Data.SqlServerCe.4.0"
description=".NET Framework Data Provider for Microsoft SQL Server Compact"
type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
</DbProviderFactories>
</system.data>
我今天面临同样的问题。
重新安装EF几次后,解决了我的问题是在我的Console项目中引用EF以及DAL项目(实际使用EF的项目)。
如果您使用的引用又引用了EF,您还必须将它添加到此项目中。
对于迟到的回复感到抱歉 - 实际上,有一个非常简单的解决方案:
如果您调查packages \\ EntityFramework.6.1.3 \\ lib \\ net45文件夹,您会注意到还有另一个已经存在的dll - EntityFramework.SqlServer。
只需添加一个引用,一切都会工作。
我有同样的问题,没有什么对我有用。 解决我这个问题的唯一办法是从我的机器上卸载SQL Server Compact (通过添加/删除程序)并重新安装它。
在我的情况下,“EntityFramework.SqlServerCompact”包丢失了。 只是想分享,如果它可以节省一个人的一天!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.