上的SQL Server CE实体框架无需驱动程序安装(Entity Framework on SQ

2019-09-16 17:24发布

我正在开发使用实体框架4和SQL Server CE数据库3.5 WPF应用程序,它的正常工作。

不过,我想有这样的应用程序与.Net框架安装了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的回答,我检查在这个岗位 detailling如何实现这一目标。 不过,我仍然有一个装配误差。

"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,文化=中性公钥= 89845dcd8080cc91'

我出的解决方案。 任何人?

编辑2:

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

2.I检查的machine.config版本:有在DbProviderFactories部分没有条目。

3.我从网上下载3.5 SP2驱动程序存在并安装了86包。

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 ???

在探微案例:我的dev的机器是Win7的X64和目标机的WinXP x86的。

Answer 1:

安装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>

确保使用System.Data.SqlServerCe.dll和System.Data.SqlServerCe.Entity.dll从C:\ Program Files文件(x86)的\微软SQL Server精简版\器v3.5 \ Private文件夹



Answer 2:

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



文章来源: Entity Framework on SQL Server CE without driver install