我正在使用Model First方法开发一个使用Entity Framework 4和SQL Compact 4的应用程序。我已经创建了我的EDM,现在我想生成一个SQL Compact 4.0数据库作为模型的数据存储。我打开生成数据库向导并单击新建连接按钮为生成的文件创建连接。将出现选择数据源对话框,但SQL Compact 4.0未列在可用数据源列表中:
我正在运行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组件。
我做错了什么,或者这是一个错误?有没有人有修复或解决方法?谢谢你的帮助。
答案 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开发程序:
以下是针对这些问题的公认解决方案。 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数据库工具。
答案 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="Data Source=C:\projects\Chinook\Chinook40.sdf"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
答案 6 :(得分:0)
可能还需要安装SQL Server Compact 4 tools,如果在安装Visual Studio 2010 SP1时没有直接安装,则可以安装它。当我遇到问题时,这对我有用。