编写配置类中的 EF 迁移种子脚本



我的EF迁移工作得很好,但我也想为我的DbMigrationsConfiguration类中的种子数据生成sql脚本。当我执行更新数据库时,种子数据运行正常,但是当我执行更新数据库脚本时,我无法获得种子插入的sql。我在普通的更新数据库上尝试了 -Verbose,但我也没有看到那里输出的种子语句。

这可能吗?

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

无论使用的是 EF 还是 EF Core,解决方案/解决方法都是让 SSMS 为你生成种子脚本:

  1. 从数据库初始值设定项和种子方法生成的干净数据库开始。 确保要编写脚本的数据在那里。

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

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

我知道

这是一个古老的线程,但是,这里有一个答案可以帮助其他人寻找答案。

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

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

Enable-Migrations -MigrationsDirectory "MigrationsContextA" -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 脚本,并且可以为不同的环境运行多个种子。

最新更新