在生产环境中混合自动和显式迁移

Mixing automatic and explicit migrations on the production environment

我看过 this question,我想知道如何将自动迁移与显式迁移混合应用到生产环境中。

假设我按以下顺序创建迁移:

由于没有为自动迁移创建文件,我们如何确定将在生产环境上创建的自动迁移SQL与在我们的开发机器上创建的相同?

我有一种感觉,一旦我们在生产环境中发布第一个版本,我们就应该完全停止使用自动迁移...

我之前已经尝试过这种情况,并且根据您的迁移顺序,这就是 EF 的行为方式:

  1. 当您将所有这些应用到数据库并执行 Update-Database -TargetMigration:0 时,所有这些都将按照与应用相同的顺序恢复。

  2. 执行 Update-Database 后,所有显式迁移都将应用于数据库,并且假设您已设置 AutomaticMigrationsEnabled = true; 应用 [Timestamp]_[YourLastMigrationName]_AutomaticMigration

请注意,EF 会处理自动迁移的执行顺序!我以为会出现问题,当我在自动迁移中创建一个新的 table XY 并且下面的 Explicit Migration D 可能依赖于那个 table 在数据库中(还有很多其他场景)。但是由于迁移中包含数据库快照,EF 将能够从这种情况中恢复并以某种方式重新安排自动迁移。

总而言之:如果不深入研究实体框架的代码,我不推荐这种方法 - 不会碰运气。在我的项目中,我只使用显式迁移,它们在一个特定的-通常仅主分支或迭代分支中维护(因为一个团队时的问题成员在 A 之上创建了迁移 B,另一个在 A 之上创建了迁移 C)。