使用Entity Framework 6.0和NuGet的SQL Server Compact 4.0私有部署

时间:2013-11-11 19:13:17

标签: deployment sql-server-ce nuget-package entity-framework-6

我已经安装了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文件夹中的所有文件?

1 个答案:

答案 0 :(得分:0)

System.Data.Entity.Core.EntityException在我的应用中已经出现问题,我也忘了在部署后更改数据库名称。

我已按照本指南进行操作,现在正在使用:

http://erikej.blogspot.sk/2013/11/entity-framework-6-sql-server-compact-4_25.html