我正在使用 Entity Framework 4 和 SQL Server CE 数据库 3.5 开发 WPF 应用程序,它工作正常。
但是,我想让这个应用程序在安装了 .Net Framework 4 但没有SQL Server Compact 3.5
驱动程序的机器上运行。而且没有安装程序。是否可以?
我尝试了以下方法:
在 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="Data Source=|DataDirectory|\Data\Database1.sdf"" 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>
添加引用
System.Data.SqlServerCe
并System.Data.SqlServerCe.Entity
允许本地复制构建应用程序并将其复制到未安装 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。