2

我正在使用 Entity Framework 4 和 SQL Server CE 数据库 3.5 开发 WPF 应用程序,它工作正常。

但是,我想让这个应用程序在安装了 .Net Framework 4 但没有SQL Server Compact 3.5驱动程序的机器上运行。而且没有安装程序。是否可以?

我尝试了以下方法:

  1. 在 app.config 中创建一个部分

    <configuration>
       <connectionStrings>
          <add name="DbEntities" 
               connectionString="metadata=res://*/Model.Model1.csdl|res://*/Model.Model1.ssdl|res://*/Model.Model1.msl;provider=System.Data.SqlServerCe.3.5;provider connection string=&quot;Data Source=|DataDirectory|\Data\Database1.sdf&quot;" 
               providerName="System.Data.EntityClient"/>
       </connectionStrings>
       <system.data>
          <DbProviderFactories>
              <add name="SQL Server Compact Edition Data Provider" 
                   invariant="System.Data.SqlServerCe" 
                   description=".NET Framework Data Provider for Microsoft SQL Server Compact Edition" 
                   type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
          </DbProviderFactories>
       </system.data>
    </configuration>
    
  2. 添加引用System.Data.SqlServerCeSystem.Data.SqlServerCe.Entity允许本地复制

  3. 构建应用程序并将其复制到未安装 SQL Server CE 驱动程序的机器上。在创建数据上下文时,我不断收到此错误:

System.ArgumentException:在配置中找不到指定的商店提供程序,或者无效。--->
System.ArgumentException:找不到请求的 .Net Framework 数据提供程序。它可能没有安装。

我在浪费时间吗?还是我应该切换到 SQLite?

谢谢!

编辑:

感谢 josemiguel.torres 的回答,我查看了这篇文章,详细介绍了如何实现这一点。但是,我仍然有一个装配错误。

"System.IO.FileLoadException: Could not load file or assembly 'System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040)"

所以我看了一下这篇解释如何解决这个问题的帖子。添加一些程序集绑定后:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Data.SqlServerCe" publicKeyToken="89845dcd8080cc91" culture="neutral"/>
      <bindingRedirect oldVersion="3.5.1.0-3.5.1.50" newVersion="3.5.1.50"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>

它仍然不起作用......:| 错误信息类似:

System.IO.FileLoadException: Could not load file or assembly 'System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

文件名:'System.Data.SqlServerCe,版本=3.5.0.0,Culture=neutral,PublicKeyToken=89845dcd8080cc91'

我没办法了。任何人?

编辑2:

1.我已经从我的机器上卸载了所有的微软“SQL Server Compact Edition”版本。

2.我检查了 machine.config 版本:在 DbProviderFactories 部分中没有条目。

3.我从那里下载了 3.5 SP2 驱动程序并安装了 x86 包。

4.我检查了我的 machine.config (v4 x86),并在 DbProviderFactories 节点下创建了以下条目:

<add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>

为什么是 3.5.0.0 而不是 3.5.1.50???

以防万一:我的开发机器在 Win7 x64 上,目标机器是 WinXP x86。

4

2 回答 2

2

安装3.5 SP2,修改app.config如下:

<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="ChinookEntities" connectionString="metadata=res://*/Chinook.csdl|res://*/Chinook.ssdl|res://*/Chinook.msl;provider=System.Data.SqlServerCe.3.5;provider connection string=&quot;Data Source=C:\Users\erik.COMMENTOR\Documents\Visual Studio 2010\Projects\SqlCeTest\Chinook.sdf&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SqlServerCe.3.5" />
      <add name="Microsoft SQL Server Compact Data Provider 3.5" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.1.50, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    </DbProviderFactories>
  </system.data>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly xmlns="">
        <assemblyIdentity name="System.Data.SqlServerCe" publicKeyToken="89845dcd8080cc91" culture="neutral" />
        <bindingRedirect oldVersion="3.5.1.0-3.5.1.50" newVersion="3.5.1.50" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

确保使用 C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.5\Private 文件夹中的 System.Data.SqlServerCe.dll 和 System.Data.SqlServerCe.Entity.dll

于 2012-04-25T12:12:16.673 回答
0

我放弃了 SQL CE 3.5 并切换到 4.0。它工作正常,感谢这篇文章。谢谢埃里克;)

于 2012-04-27T14:58:43.877 回答