使用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>
希望它有帮助..谢谢。
- 仅支持初始化器,实体成员和实体导航属性
- ASP.NET身份 – 不支持每种types的多个对象集
- 在DataGridView中显示导航属性的属性(二级属性)
- 多对多的映射表
- entity framework4.1 objectContext与dbContext
- MySQL – 实体:表“TableDetails”中的列“IsPrimaryKey”的值是DBNull
- “System.Data.Entity.Internal.AppConfig”的types初始值设定项引发exception
- LINQ to Entities不识别方法System.String Format(System.String,System.Object,System.Object)'
- EntityFramework – 包含组合键的查询