我已经安装了Entity Framework 6和SQL Server Compact 4.0的标准设置WPF项目。
构建项目时,SQL Server CE部署的所有必需文件都已正确复制到Release
文件夹,包括System.Data.SqlServerCe.dll
。
但是在没有安装SQL Server Compact的计算机上运行项目会引发System.IO.FileLoadException
。
在我的开发环境中,是从GAC加载的System.Data.SqlServerCe.dll
。我找到了这个参考,其中解释了dll的版本号:http://technet.microsoft.com/en-us/library/gg213826.aspx
我认为NuGet的System.Data.SqlServerCe.dll
汇编版本是4.0.0.0。
所以我手动将项目中的System.Data.SqlServerCe.dll
引用更改为私有文件夹中的4.0.0.1文件,并将System.Data.SqlServerCe.dll
4.0.0.1复制到生产计算机。
我改变了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.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
</DbProviderFactories>
</system.data>
现在我在开发机器上得到了这个例外:
给出的连接不是'SqlCeConnection'类型。
在生产机器上,我得到System.Data.Entity.Core.EntityException
。
是否有机会使用NuGet和EF 6进行私有部署?或者是否需要手动复制x86,amd64文件夹中的所有文件?
答案 0 :(得分:0)
System.Data.Entity.Core.EntityException
在我的应用中已经出现问题,我也忘了在部署后更改数据库名称。
我已按照本指南进行操作,现在正在使用:
http://erikej.blogspot.sk/2013/11/entity-framework-6-sql-server-compact-4_25.html