实体框架4和SQL Compact 4:如何生成数据库?

时间:2011-03-05 17:02:32

标签: entity-framework entity-framework-4 sql-server-ce

我正在使用Model First方法开发一个使用Entity Framework 4和SQL Compact 4的应用程序。我已经创建了我的EDM,现在我想生成一个SQL Compact 4.0数据库作为模型的数据存储。我打开生成数据库向导并单击新建连接按钮为生成的文件创建连接。将出现选择数据源对话框,但SQL Compact 4.0未列在可用数据源列表中:

enter image description here

我正在运行VS 2010 SP1(测试版),我已经安装了VS Compact Tools for SQL Compact 4.0。我可以从Server Explorer创建SQL Compact 4.0数据连接。只有在生成数据库向导中才会出现4.0选项。顺便说一句,我的SQL Compact 4.0安装确实包含System.Data.SqlServerCe.Entity.dll。所以我应该有我需要的SQL Compact组件。

我做错了什么,或者这是一个错误?有没有人有修复或解决方法?谢谢你的帮助。

7 个答案:

答案 0 :(得分:34)

作为一种解决方法,我使用生成数据库向导生成一个SQL Compact 3.5脚本,该脚本是针对在VS 2010解决方案资源管理器中创建的空白SQL Compact 4.0数据库运行的。以下是完成该任务的步骤:

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

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

第3步:删除在步骤1中创建的虚拟文件。

步骤4:使用VS 2010的Server Explorer创建将在项目中使用的实际SQL Compact 4.0文件。

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

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

步骤7:再次右键单击脚本空白区域,然后从上下文菜单中选择执行SQL 。该脚本将执行,您将在脚本下方的窗格中获得通常的结果消息。假设成功执行,则数据库将配置为与实体数据模型匹配。

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

此时,您应该能够使用Entity Framework 4来处理数据库。

答案 1 :(得分: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。开发人员可以手动添加对Compact 4.0的ADO.NET提供程序(System.Data.SqlServerCe)的引用,以便在Windows项目中为Compact 4.0开发程序:

  1. 用于配置数据集的数据源配置向导。
  2. 配置数据配置向导,用于使用Sync FX设置与SQL Server同步数据和架构。
  3. 实体数据模型向导,用于从Compact数据库生成实体。
  4. 以下是针对这些问题的公认解决方案。 http://erikej.blogspot.com/2010/11/using-entity-framework-with-sql-server.html

答案 2 :(得分:1)

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

修改

我发现了workaround

答案 3 :(得分: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

答案 4 :(得分:0)

还有一个,使用WebMatrix数据库工具。

Microsoft WebMatrix

答案 5 :(得分: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>

答案 6 :(得分:0)

可能还需要安装SQL Server Compact 4 tools,如果在安装Visual Studio 2010 SP1时没有直接安装,则可以安装它。当我遇到问题时,这对我有用。