在生产环境中混合自动和显式迁移
Mixing automatic and explicit migrations on the production environment
我看过 this question,我想知道如何将自动迁移与显式迁移混合应用到生产环境中。
假设我按以下顺序创建迁移:
- 显式迁移 A
- 显式迁移 B
- 自动迁移 C
- 显式迁移 D
由于没有为自动迁移创建文件,我们如何确定将在生产环境上创建的自动迁移SQL与在我们的开发机器上创建的相同?
我有一种感觉,一旦我们在生产环境中发布第一个版本,我们就应该完全停止使用自动迁移...
我之前已经尝试过这种情况,并且根据您的迁移顺序,这就是 EF 的行为方式:
当您将所有这些应用到数据库并执行 Update-Database -TargetMigration:0
时,所有这些都将按照与应用相同的顺序恢复。
执行 Update-Database
后,所有显式迁移都将应用于数据库,并且假设您已设置 AutomaticMigrationsEnabled = true;
应用 [Timestamp]_[YourLastMigrationName]_AutomaticMigration
。
请注意,EF 会处理自动迁移的执行顺序!我以为会出现问题,当我在自动迁移中创建一个新的 table XY
并且下面的 Explicit Migration D
可能依赖于那个 table 在数据库中(还有很多其他场景)。但是由于迁移中包含数据库快照,EF 将能够从这种情况中恢复并以某种方式重新安排自动迁移。
总而言之:如果不深入研究实体框架的代码,我不推荐这种方法 - 不会碰运气。在我的项目中,我只使用显式迁移,它们在一个特定的-通常仅主分支或迭代分支中维护(因为一个团队时的问题成员在 A 之上创建了迁移 B,另一个在 A 之上创建了迁移 C)。
我看过 this question,我想知道如何将自动迁移与显式迁移混合应用到生产环境中。
假设我按以下顺序创建迁移:
- 显式迁移 A
- 显式迁移 B
- 自动迁移 C
- 显式迁移 D
由于没有为自动迁移创建文件,我们如何确定将在生产环境上创建的自动迁移SQL与在我们的开发机器上创建的相同?
我有一种感觉,一旦我们在生产环境中发布第一个版本,我们就应该完全停止使用自动迁移...
我之前已经尝试过这种情况,并且根据您的迁移顺序,这就是 EF 的行为方式:
当您将所有这些应用到数据库并执行
Update-Database -TargetMigration:0
时,所有这些都将按照与应用相同的顺序恢复。执行
Update-Database
后,所有显式迁移都将应用于数据库,并且假设您已设置AutomaticMigrationsEnabled = true;
应用[Timestamp]_[YourLastMigrationName]_AutomaticMigration
。
请注意,EF 会处理自动迁移的执行顺序!我以为会出现问题,当我在自动迁移中创建一个新的 table XY
并且下面的 Explicit Migration D
可能依赖于那个 table 在数据库中(还有很多其他场景)。但是由于迁移中包含数据库快照,EF 将能够从这种情况中恢复并以某种方式重新安排自动迁移。
总而言之:如果不深入研究实体框架的代码,我不推荐这种方法 - 不会碰运气。在我的项目中,我只使用显式迁移,它们在一个特定的-通常仅主分支或迭代分支中维护(因为一个团队时的问题成员在 A 之上创建了迁移 B,另一个在 A 之上创建了迁移 C)。