我正在编写一个使用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文件正确无误.我相信我的(默认连接工厂和提供商部分),但这里是内容:
build文件夹包含以下文件(当然还有特定于应用程序的文件):
EntityFramework.dll
EntityFramework.xml
EntityFramework.SqlServer.dll
EntityFramework.SqlServer.xml
EntityFramework.SqlServerCompact.dll
EntityFramework.SqlServerCompact.xml
在每个amd64和x86子文件夹中都有以下文件:
sqlceca40.dll
sqlcecompact40.dll
sqlceer40EN.dll
sqlceme40.dll
sqlceqp40.dll
sqlcese40.dll
我确定该程序在开发机器上运行,因为已经安装了SQL Server CE,但是如何在其他机器上使用本地SQL Server CE dll来运行它?
我今天也面临着同样的问题。
几次重新安装EF之后,解决我问题的方法是在Console项目中与DAL项目(实际上使用EF的项目)一起引用EF。
如果您使用的引用又引用了EF,则也必须将其添加到该项目中。
见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>