我的EF迁移运行良好,但我也想从DbMigrationsConfiguration类生成种子数据的sql脚本。 当我执行Update-Database时,种子数据运行正常,但是当我执行UpdateDatabase -Script时,我没有获得种子插入的sql。我尝试在正常的Update-Database上进行-Verbose,但我没有看到那里的种子语句输出。
这可能吗?
答案 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脚本,并且可以针对不同的环境运行多个种子。