我正在编写一个使用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>
构建文件夹包含以下文件(当然还有特定于应用程序的文件):
在每个amd64和x86子文件夹中都有以下文件:
我确信该程序在开发计算机上运行,因为已安装SQL Server CE,但如何在其他计算机上仅使用本地SQL Server CE dll运行它?
答案 0 :(得分:22)
请参阅http://tech.aendeavors.com/2011/06/09/bin-deploy-sqlce-4-0-and-ef-4-1/
您可能遗漏的相关内容似乎是:
确保引用System.Data.SqlServerCe并将其设置为“复制” 本地“在物业。
将以下内容添加到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>
答案 1 :(得分:5)
我今天面临同样的问题 重新安装EF几次后,解决了我的问题是在我的Console项目中引用EF以及DAL项目(实际使用EF的项目)。
如果您使用的引用又引用了EF,您还必须将它添加到此项目中。
答案 2 :(得分:2)
对于迟到的回复感到抱歉 - 实际上,这是一个非常简单的解决方案:
如果您调查packages \ EntityFramework.6.1.3 \ lib \ net45文件夹,您会注意到还有另一个已经存在的dll - EntityFramework.SqlServer。
只需添加对它的引用,一切都会起作用。
答案 3 :(得分:0)
我有同样的问题,没有任何对我有用。解决我这个问题的唯一办法是从我的机器上卸载SQL Server Compact (通过添加/删除程序)并重新安装它。
答案 4 :(得分:0)
就我而言,缺少“ EntityFramework.SqlServerCompact”包。只是想分享一下,以防万一可以挽救别人的一天!