26

我的 EF 迁移运行良好,但我还想为我的 DbMigrationsConfiguration 类中的种子数据生成 sql 脚本。当我执行 Update-Database 时,种子数据运行正常,但是当我执行 UpdateDatabase -Script 时,我没有得到种子插入的 sql。我在正常的 Update-Database 上尝试了 -Verbose,但我也没有看到种子语句在那里输出。

这可能吗?

4

3 回答 3

19

不,这是不可能的。配置类不是迁移本身的一部分——它是执行迁移的基础设施。您的所有迁移都有一个配置类,并且Seed在每次迁移运行后执行其方法 - 您甚至可以使用上下文来播种数据,因此此方法在迁移完成后执行=它不能成为迁移的一部分。只有迁移类的内容是脚本化的。

于 2012-05-03T08:23:18.133 回答
9

另一个解决方案/解决方法是让 SSMS 为您生成脚本:

1) 从您的 DB 初始化程序和种子方法生成的干净数据库开始。确保您想要编写脚本的数据在那里。

2) 使用 SSMS,右键单击数据库,转到任务 >“生成脚本...”,然后按照向导进行操作。在高级选项下,确保为“脚本的数据类型”选择“仅数据”。

3) 从生成的脚本中,将所需的种子语句复制到您的目标脚本中。

于 2016-08-30T18:34:10.827 回答
4

我知道这是一个旧线程,但是,这是一个可以帮助其他人寻找答案的答案。

您可以使用实体框架提供的 Migrate.exe。这将允许您在数据库上下文中运行 Seed 方法。

如果您需要运行特定的 Seed 方法,可以将其放在单独的迁移配置文件中,如下所示:

Enable-Migrations -MigrationsDirectory "Migrations\ContextA" -ContextTypeName MyProject.Models.ContextA

命令:

Migrate.exe MyAssembly CustomConfig /startupConfigurationFile=”..\web.config”

在 NuGet 包目录中查找它:“..\packages\EntityFramework.6.1.3\tools”

您可以将迁移配置指定为它的参数。应该包含您的CustomConfig基于代码的 Seed 方法。因此,通过这种方式,您不需要从迁移中生成 SQL 脚本。

更多信息在这里:

http://www.eidias.com/blog/2014/10/13/initialcreate-migration-and-why-is-it-important

http://www.gitshah.com/2014/06/how-to-run-entity-framework-migrations.html

使用此解决方案,您无需生成 SQL 脚本,并且可以针对不同环境运行多个 Seed。

于 2016-02-19T12:28:43.393 回答