使用entity framework与SQL Compact专用安装

我正在使用SQL Compact在桌面应用程序中使用entity framework4。 我想在我的应用程序中使用SQL Compact的私有安装 ,这样我的安装程序就可以安装SQL Compact,而不需要用户进行第二次安装。 它也避免了版本控制的麻烦。

我的开发机器安装了SQL Compact 3.5 SP1作为公共安装,所以我的应用程序在那里运行良好,正如人们所期望的那样。 但是它没有在我的testing机器上运行,没有安装SQL Compact。 我得到这个错误:

The specified store provider cannot be found in the configuration, or is not valid. 

我知道有些人在使用SQL Compact私有安装方面遇到困难,但是我已经使用了一段时间了 ,而且我非常喜欢它们。 不幸的是,我的常规私人安装方法不起作用。 我检查了我的SQL CE文件上的版本号,它们都是SP2版本的3.8.8078.0。

以下是我在私人安装中包含的文件:

  • sqlcecompact35.dll
  • sqlceer35EN.dll
  • sqlceme35.dll
  • sqlceqp35.dll
  • sqlcese35.dll
  • System.Data.SqlServerCe.dll
  • System.Data.SqlServerCe.Entity.dll

我已将System.Data.SqlServerCe的引用添加到我的项目中,并且已validation上面列出的所有文件都被复制到安装机器上的应用程序文件夹中。

这里是我打开SQL Compact文件时用来configurationEntityConnectionStringBuilder的代码:

 var sqlCompactConnectionString = string.Format("Data Source={0}", filePath); // Set Builder properties builder.Metadata = string.Format("res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl", edmName); builder.Provider = "System.Data.SqlServerCe.3.5"; builder.ProviderConnectionString = sqlCompactConnectionString; var edmConnectionString = builder.ToString(); 

我错过了一个文件? 我是否缺less一个configuration步骤来告诉entity framework在哪里可以find我的SQL Compact DLLs? 为什么EF在安装机器上找不到我的SQL Compact DLL? 谢谢你的帮助。

我想通过史蒂夫·拉斯克(Steve Lasker)的一篇博客文章来了解如何去做。 基本上,这是你必须做的:

(1)在您的项目中设置对System.Data.SqlServerCe.dll的引用。 将CopyLocal属性设置为True。

(2)在您的项目的App.config中,添加以下XML标记。 它告诉EntityFramework查看您的数据提供者的SQL Compact的私有安装:

 <system.data> <DbProviderFactories> <remove invariant="System.Data.SqlServerCe.3.5"/> <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.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/> </DbProviderFactories> </system.data> 

(3)在安装项目中,将以下文件添加到文件系统编辑器中的应用程序文件夹中:

  • sqlcecompact35.dll
  • sqlceme35.dll
  • sqlcese35.dll
  • System.Data.SqlServerCe.Entity.dll

为了logging,对于SQL CE 4,web.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> 

在私有部署的情况下,Version = 4.0.0.1;在普通部署的情况下,Version = 4.0.0.0

感谢您的提示 – 帮助了我很多。 在SQL Server Compact-Team博客上有一篇文章 ,它为Sql Server Compact 3.5 SP2版本添加了一些额外的信息。

经过一段时间,与私人部署的SQL Server紧凑我发现了一些额外的要求。

我在几个不同的系统上试用了我的应用程序,并认识到我的应用程序在某些系统上不能正常工作。

例如:试试这个:

– 我build立了一个干净的winxp sp3安装

– 安装.net Framework 4.0扩展

– 将我的应用程序部署到新安装(包括/ sql server compact team博客文章中描述的所有必需的dll和调整)

所以,经过一番研究,我发现除了.NET Framework 4安装之外,我还必须安装.net framework 2,并且工作正常。

所以这里是我的问题:哪个组件被用于没有包含在.NET Framework 4中的SQL Server精简版?

我不想超载我的设置,并链接到我的引导程序的两个框架…有没有人知道任何好的提示?

非常感谢sql服务器团队!

SQL Server Compact v3.5依赖于“Visual C ++运行时2005(或8.0)”(也称为CRT80)。 我们将CRT80模块封装在我们的MSI中。 在私人部署的情况下,

你需要照顾这个依赖。 因为.NET FX v2.0也打包和安装CRT80模块,因此系统会自动在系统上使用.NET FX v2.0。

谢谢

这对我来说是有效的:

你有一个dotNet版本2.0和4.0的machine.config文件:

dotNET 2.0

  C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ CONFIG \ machine.config中 

dotNet 4.0

  C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ CONFIG \ machine.config中 

如果你打开2.0版本的文件,你会发现它有一个<system.data>节点,可能看起来像这样:

 <system.data> <DbProviderFactories> <add name="Odbc Data Provider" ... stuff here ... /> <add name="OracleClient Data Provider" ... stuff here ...> ... more lines similar to the one above ... <add name="Microsoft SQL Server Compact Data Provider" Invariant="System.Data.SqlServerCe.3.5" ...> </DbProviderFactories> </system.data> 

然而,如果你打开了一个dotNet 4.0,它看起来更悲惨的是:

 <system.data> <DbProviderFactories> </DbProviderFactories> </system.data> 

或者,甚至根本就没有<system.data>节点! 在任何一种情况下,只需将v2的machine.config文件中的<system.data>节点完整地复制到v4的machine.config文件中。

边注

如果在保存对v4 machine.config的编辑时遇到问题,那么点击编辑器启动图标时可能必须右键单击几次,才能以pipe理员模式运行。

被困在同样的问题,

“指定的商店提供者在configuration中找不到或无效”。

我来到这个职位。 我试过几乎所有的东西 我已经使用nugets安装了“ System.Data.SqlServerCe ”。

所以我已经在我的web.config中添加了下面的代码行

 <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" /> <!--<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />--> <!--<add name="Microsoft EntityClient" invariant="System.Data.EntityClient.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.EntityClient, System.Data.EntityClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />--> </DbProviderFactories> 

仍然错误继续..

我通过取消注释上面代码中的最后两个注释行来摆脱问题…现在变成了

 <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" /> <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> <add name="Microsoft EntityClient" invariant="System.Data.EntityClient.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.EntityClient, System.Data.EntityClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" /> </DbProviderFactories> 

希望它有帮助..谢谢。