2011-03-05 128 views
27

我正在使用实体模型优先的方法开发一个实体框架4和SQL Compact 4的应用程序。我已经创建了我的EDM,现在我想生成一个SQL Compact 4.0数据库来充当模型的数据存储。我弹出生成数据库向导并单击新建连接按钮为生成的文件创建连接。该选择数据源出现对话,但SQL精简4.0没有可用的数据源列表中列出:实体框架4和SQL Compact 4:如何生成数据库?

enter image description here

我运行VS 2010 SP1(测试版),我已经安装了VS 2010工具对于SQL Compact 4.0。我可以从服务器资源管理器创建一个SQL Compact 4.0数据连接。只有在生成数据库向导中,4.0选项才会出现。顺便说一句,我的SQL Compact 4.0安装包括System.Data.SqlServerCe.Entity.dll。所以我应该有我需要的SQL Compact组件。

我正在做的事情不正确,还是这是一个错误?有没有人有修补程序或解决方法?谢谢你的帮助。

+0

David,你看过使用SQLite代替CE吗?我发现SQLite更易于使用并完全支持EF4。 – 2011-03-06 17:09:44

回答

34

作为一种变通方法,我现在用的是生成数据库向导来生成一个SQL精简3.5脚本,我扫荡一空SQL精简4.0数据库在VS 2010解决方案资源管理器中创建运行。以下是完成该任务的步骤:

步骤1:运行生成数据库向导。它会提示在第一页创建一个文件,因此它会创建一个SQL Compact 3.5文件。这个文件是一个虚拟文件,所以你命名它并不重要。

步骤2:完成向导以创建将配置新数据库的DDL脚本。

步骤3:删除在步骤1中

步骤4中创建虚拟文件:使用VS 2010的服务器资源管理器创建实际的SQL精简4.0文件,你会在你的项目中使用。

步骤5:生成数据库向导两处引用SQL契约 “3.5” 的EDMX文件;这些参考文件需要更改为“4.0”。在VS 2010的XML编辑器中打开EDMX文件(右键单击并选择“打开方式”以进入XML编辑器)。第7行应包含“3.5”引用。将这些更改为“4.0”并保存该文件。

第6步:在VS 2010中打开生成的EDMX.SQLCE脚本文件。VS将通过工作窗格底部的横幅指示脚本已断开连接。右键单击横幅上方的空白区域,然后在出现的上下文菜单中选择连接>连接。这带来了一个连接对话框 - 用它的脚本连接到您在步骤创建的SQL精简4.0数据库4.

步骤7:脚本中的空格再次右键单击并选择执行上下文菜单中的SQL。脚本将执行,您将在脚本下面的窗格中看到通常的结果消息。假定成功执行,数据库将被配置为匹配实体数据模型。

第8步:我们还需要确保App.config/web.config没有指向虚拟文件。如果将其更改为上述步骤4中创建的实际CE 4.0文件。否则,当我们对模型进行更改时,我们无法重新生成脚本。在配置文件中也将3.5更改为4.0。

在这一点上,你应该能够使用实体框架4来处理你的数据库。

1

据我所知,当前版本的VS 2010不支持SQL CE 4.0。它应该包含在VS 2010 SP1(目前处于测试阶段)。检查this blog post,它也描述了在SP1中使用带有SQL CE 4.0的EF Model。

编辑:

我发现这个workaround

+1

谢谢,但我已经安装了SP1和VS工具。博客文章并没有真正解决我的问题 - 它首先面向db-first和代码,而我正在做模型优先。 – 2011-03-05 20:15:27

+0

我在寻找另一件事情时发现了一些解决方法。我添加了链接到我的答案。 – 2011-03-06 09:55:38

2

要回答的评论下面,并解决这些问题,根据: http://blogs.msdn.com/b/sqlservercompact/archive/2011/01/12/microsoft-sql-server-compact-4-0-is-available-for-download.aspx

这些向导到不行。

Visual Studio 2010 SP1 Beta中的VB或C#Windows项目中的设计器:以下向导不适用于Windows项目系统中的Compact 4.0。开发人员可以手动添加引用紧凑型4.0(System.Data.SqlServerCe)ADO.NET提供程序开发紧凑型4.0在Windows项目计划:用于配置数据集

  1. 数据源配置向导。
  2. 配置数据配置向导用于设置使用Sync FX与SQL Server同步数据和模式。
  3. 用于从Compact数据库生成实体的实体数据模型向导。

以下是针对这些问题接受的解决方法。 http://erikej.blogspot.com/2010/11/using-entity-framework-with-sql-server.html

+0

谢谢,但我的问题是实体框架4. EF4有一个*生成数据库向导*,它将从实体数据模型中为SQL Compact数据库生成一个T-SQL脚本。它是*生成数据库向导*,不会将SQL Compact 4显示为生成选项。 – 2011-03-05 22:59:22

+0

如果您要使用Transact SQL db脚本,CE语法与SQLServer没有区别。你应该耐心地用这个脚本生成表格等等。我明白你的意思了。您是否尝试添加与服务器资源管理器的连接?看看你建立连接后会不会出现?希望我能有更多的帮助。 – Dimentox 2011-03-06 00:33:27

+0

+1:感谢您的帮助。 – 2011-03-06 01:35:15

0

我可以运行从我Chinook.Data项目生成带出任何问题数据库向导,请确保你在你的app.config正确的连接字符串。 http://erikej.blogspot.com/2010/11/using-entity-framework-with-sql-server.html

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <connectionStrings> 
    <add name="ChinookEntities" connectionString="metadata=res://*/ChinookModel.csdl|res://*/ChinookModel.ssdl|res://*/ChinookModel.msl;provider=System.Data.SqlServerCe.4.0;provider connection string=&quot;Data Source=C:\projects\Chinook\Chinook40.sdf&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
</configuration> 
+0

谢谢,Erik - 当您运行“生成数据库向导”时,您是否拥有SQL Compact 4.0的条目?向导为我运行,但它不显示Ver。 4.0作为选项。 – 2011-03-08 15:07:20

+0

我刚刚得到生成DDL的第二个屏幕,但它不显示步骤1中的4.0连接,这是正确的。您必须将edmx移动到Web项目才能在步骤1中看到4.0连接。 – ErikEJ 2011-03-11 09:32:04

+0

我开发了一种解决方法,可以从Entity Framework 4 EDM创建SQL Compact 4.0数据库,而无需使用Web项目。看到这个问题的接受答案。 – 2011-03-16 22:23:18

1

您可以使用IDatabaseInitializer和使用

if (File.Exists("Test.sdf")) 
    File.Delete("Test.sdf"); 

string connStr = "Data Source = Test.sdf; Password = <password>"; 

SqlCeEngine engine = new SqlCeEngine(connStr); 
engine.CreateDatabase(); 
engine.Dispose(); 

SqlCeConnection conn = null; 

try { 
    conn = new SqlCeConnection(connStr); 
    conn.Open(); 

    SqlCeCommand cmd = conn.CreateCommand(); 
    cmd.CommandText = "CREATE TABLE myTable (col1 int, col2 ntext)"; 
    cmd.ExecuteNonQuery(); 

catch { 
finally { 
    conn.Close(); 

http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceengine(v=vs.80).aspx

0

可能需要安装SQL Server Compact 4 tools为好,如果它不直接安装时的Visual Studio 2010 SP1在代码中创建数据库已安装,您可以安装它。当我遇到问题时,这就是我的工作。