【发布时间】:2020-06-19 17:45:04
【问题描述】:
我有一个在启动时使用 EF Core 运行时迁移的服务:
var migrator = dbContext.Database.GetService<IMigrator>();
await migrator.MigrateAsync("targetMigration", cancellationToken);
要生成迁移,我首先更新 DbContext 类,然后执行“dotnet ef migrations add”来生成迁移代码。
发生迁移后,部署的升级可能会自动回滚到以前的版本。例如,如果健康检查或测试失败。在这种情况下,我希望以前版本的应用程序能够自动回滚迁移。我知道 MigrateAsync 可以恢复迁移,但在我当前的工作流程中,迁移代码不会出现在以前版本的代码中,所以我不确定它是否能够恢复迁移。
我可以想到这样的工作流程:
更改 DbContext 并运行“dotnet ef add migration”生成迁移代码
还原 DbContext 更改并部署应用程序,以便存在迁移“n”的代码,但 MigrateAsync 中的目标迁移和 DbContext 的版本为“n-1”
重新应用 DbContext 更改,将 MigrateAsync 更改为目标迁移 'n',然后部署应用程序
但这似乎很尴尬,我不确定是否有必要,以及它是否一定会起作用。
什么是使用 EF Core 部署代码优先运行时迁移的好策略,这样如果部署了以前的版本,迁移可以自动回滚?
【问题讨论】:
标签: c# entity-framework entity-framework-core database-migration entity-framework-migrations