【问题标题】:Generate SQL script to Seed initial data with Entity Framework v6.1 Code First使用 Entity Framework v6.1 Code First 生成 SQL 脚本以播种初始数据
【发布时间】:2017-03-08 17:12:46
【问题描述】:

在部署使用 Entity Framework v6.1 Code First 的应用程序时,我使用Update-Database -Script 来获取可以对我的数据库执行的 SQL 语句。如何生成一个类似的脚本,将Seed 我的数据库与初始数据一起使用?我的生产服务器没有安装 Visual Studio,我也不希望它安装在那里。我希望能够向 DBA 提供一个用于创建架构的脚本(我有上面提到的)和一个用于播种初始数据的脚本。

【问题讨论】:

  • 定义“用初始数据播种我的数据库”。如果您指的是查找表,那么您应该使用InsertValues 编写脚本。除非我在这里完全错过了什么。
  • 我应该更具体。我在Configuration.cs 文件中的Seed() 方法中有代码。我正在寻找一种方法来执行此代码并获取数据库中所做的数据更改并创建一个 SQL 脚本。此代码将角色添加到表中,但使用身份框架来执行此操作,从而生成身份列的 guid。
  • 您不能通过迁移编写脚本。您可以通过 SSMS 编写脚本,如 here at bottom 所述,我在代码中使用 Initializer Seed 播种身份。这与迁移种子不同,仅在创建数据库时运行。另一种选择可能是使用migrate.exe

标签: sql-server deployment ef-code-first entity-framework-6


【解决方案1】:

假设您有一个已播种的数据库,SSMS 中有一个导出功能(仅数据),允许您创建种子数据的脚本。这里有一篇很好的文章。 (https://keyholesoftware.com/2016/12/12/creating-a-sql-database-project-for-isolated-development/)

前提是使用预种子数据库作为模型。这是对上面链接中的 keyholesoftware 信息以及我个人认为有用的几个 cmets 的重新散列。

  • 选择初始种子数据库并右键单击 |任务 | 生成脚本
  • 从对象中选择表
  • 使用单个 每个表的文件(提供更多控制)
  • 选择一个目录 (沙箱)您保存种子数据的位置(您应该创建一个文件夹 在此位置的视觉工作室项目中。 (如果你想要 保持原始状态的文件,为您的位置选择一个沙箱,然后 然后在完成这部分后将它们移动到您创建的文件夹中 出口。)
  • 在高级部分(高级按钮)更改 仅数据的“数据类型”
  • 脚本“使用数据库” false(您仍处于高级部分,执行此操作以导出到您的文件)并完成此部分,关闭高级部分,然后关闭向导。

将这些交给您的 DBA - 另一方面,假设您有 Visual Studio:

  • 回到VS,(我用的是VS2017),显示所有文件(它是解决方案资源管理器中的一个图标关闭 向右)
  • 包括您导出的表(从您的沙箱 刚刚创建)。您需要设置每个的属性 从“build”到“none”(它在属性中的第一选择),或者去 关闭您的项目并编辑该项目的 csproj 文件以 更改它处理包含文件的方式。我使用 alt-Enter 来 打开每个属性并将构建设置为无。 (如果它发生在您身上,您将看到的错误是“SQL71006)
  • 如果您有 您项目中的 postdeploy 文件夹,现在右键单击它(或 现在创建它并将您的文件从“沙箱”复制到此文件夹)。
  • 右键单击 postdeploy 文件夹并添加脚本 | “部署后脚本”
  • 在VS中打开脚本。选择“sqlcmd”模式。在这里注意 - 制作 确保您的网络允许 sqlcmd 运行 - 一些限制它 能力 - 如果您不确定您的能力,请咨询您的系统管理员 生产环境存在限制。
  • 为您希望使用种子数据的表添加命令。你可能需要 使用 SSMS 编写删除脚本并在您的表上创建,以便您 可以绕过可能阻止您跑步的限制 你的表格脚本。我从用户开始——我必须立即 从该表中删除约束以便导入。我添加了 他们在运行部署后脚本之前放弃约束,并且 然后在脚本末尾重新创建约束。
  • 清理并重建您的数据库项目
  • 发布您的项目 - 它 应该创建您的数据库并添加种子数据(打开发布 - 连接到您要发布到的数据库 - 保存配置文件 - 使用默认位置 - 单击发布。
  • 该过程应该是 能够重复自己。前几次我删除并重新创建 数据库,但重新发布当前似乎只是工作 很好。

注意 - 如果您收到 SQL71006 错误,请在此处查看 jamie thompson 的回答: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/47d4124b-82cd-48f9-8ba7-c2ae4c73cbcf/sql71006-why-am-i-getting-this-error?forum=ssdt&prof=required

【讨论】:

    猜你喜欢
    • 2014-03-07
    • 2017-05-31
    • 1970-01-01
    • 2016-08-22
    • 2011-09-12
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多