从Configuration类编写EF迁移种子

时间:2012-05-02 16:33:58

标签: entity-framework ef-migrations

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

这可能吗?

3 个答案:

答案 0 :(得分:19)

不,不可能。配置类不是迁移本身的一部分 - 它是执行迁移的基础结构。您拥有所有迁移的单一配置类,并且每次迁移运行后都会执行其Seed方法 - 您甚至可以使用上下文来播种数据,因此在迁移完成后执行此方法=它不能成为其中的一部分迁移仅编写迁移类的内容。

答案 1 :(得分:9)

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

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

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

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

答案 2 :(得分:4)

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

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

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

grid.arrange(grobs = lg[1:6], ncol=2)
grid.arrange(grobs = lg[7:12], ncol=2)

命令:

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

在NuGet包目录中查找:" .. \ packages \ EntityFramework.6.1.3 \ tools"

您可以将迁移配置指定为参数。 Migrate.exe MyAssembly CustomConfig /startupConfigurationFile=”..\web.config” 应包含基于代码的种子方法。因此,这样您就不需要从迁移生成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脚本,并且可以针对不同的环境运行多个种子。