6

我使用 Entity Framework 4.0 使用模型优先方法创建了一个数据库模型。然后我使用从模型生成数据库创建了一个 sql 脚本...我还在我的 App_Data 文件夹中创建了一个 SQL Server 数据库文件。我现在如何针对这个 MDF 文件运行 SQL 文件?

我正在使用 Visual Studio 2010。

4

4 回答 4

5

我遇到了同样的问题,这对我有用。

当我选择“从模型生成数据库...”时,我创建了一个新的 MDF 文件。此过程运行良好,Visual Studio 生成了所需的 SQL 脚本。但是,我不知道如何连接到同一个 MDF 文件来运行脚本。

事实证明这很容易。

  1. 右键单击脚本并选择连接 > 连接

  2. 应该已经为本地 SQLEXPRESS 实例设置了服务器名称和身份验证。

  3. 单击选项按钮

  4. 单击附加连接参数选项卡

  5. 使用以下指导粘贴数据库文件的路径:

    AttachDBFilename=C:\Path\To\Database\LocalData.mdf;database=LocalData;

  6. 单击连接按钮

如果您仍然无法连接,可能是因为已经有一个打开的连接。检查服务器资源管理器,如果连接已打开,请右键单击并选择关闭连接。

只要 SQL 脚本保持连接,此过程还将创建持久连接。您将要关闭脚本或选择右键单击 > 连接 > 断开连接。

更多信息可以在这个问题上找到: EF4 Generate Database

于 2011-01-16T14:26:06.540 回答
1

我找到了一个解决方案,但它有点hacky。

我有 SQL Server Express (2008 R2)。因此,当从模型生成数据库时,我连接到它并让它在那里建立一个数据库。然后我去C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA。10_50 部分因版本而异,可能对您有所不同。所以在这个文件夹中有一个 .mdf 文件,其名称与数据库一样 - .mdf。还有一个 _log.ldf 文件。我将这些复制到我项目的 App_Data 文件夹中。

这可行,但为模型中的每次更改生成一个新的 .mdf 数据库非常耗时。所以我在发货前这样做。

如果您找到更好的答案,请分享。

于 2010-11-22T15:28:54.343 回答
0

我遇到了同样的问题,使用 EF5 在 mvc4 中使用 Model First 方法。我所做的是创建项目、添加新模型、在 edmx 图上添加实体和关联。右键单击图表并选择“从模型生成数据库”。这将生成 sql 文件。

现在在解决方案资源管理器的 App_Data 文件夹中添加一个 mdf 文件,例如 Database1.mdf(添加 > 新项目 > 数据 > SQL Server 数据库)。

右键单击 > 打开此 mdf 文件。现在在属性窗格中,您有连接字符串。照原样复制即可。

恢复到您生成的 SQL 脚本,右键单击 > 执行。弹出窗口询问连接参数。确保服务器名称中的值正确(使用您的 PC 名称或 127.0.0.1)。

现在在选项中,单击 Additional Connection Parameters 选项卡并粘贴从 mdf 文件的属性中复制的连接字符串。

这对我来说非常有效,而且非常合乎逻辑。无需直接使用 SQL Server 安装目录。

于 2013-07-15T09:52:52.667 回答
0

上面的答案很好,但我必须在 VS2013 中执行更多步骤,但我确实在以下帮助下解决了问题。

  1. 我从现有的 .mdf 创建了一个 ADO.NET 模型
  2. 右键单击-> 从模型生成数据库
  3. 右键单击解决方案资源管理器中的 .mdf 并打开
  4. 在属性窗格中将连接字符串复制到剪贴板
  5. 在 ADO 模型创建的 SQLQuery 窗口中单击更改连接
  6. 在新的连接到服务器窗口中 -> 附加连接参数 -> 从剪贴板粘贴连接字符串
  7. 在服务器资源管理器中右键单击数据库 -> 新查询
  8. 将查询从 ADO 生成脚本复制并粘贴到新的查询窗口
  9. 将 USE [yourdatabase.mdf] 更改为 USE [longPath] 其中 longPath 是顶部下拉列表中列出的非常长的路径。最简单的方法是开始输入并按 CTRL-SPACE。
  10. 运行查询
  11. 保存 longPath,因为您可以将它粘贴到 ADO 生成的任何新查询的 USE[] 中。

我希望这对某人有所帮助 - 快乐编码!

于 2016-01-17T19:20:03.433 回答