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

Entity framework 在生产环境中混合自动迁移和显式迁移,entity-framework,entity-framework-6,entity-framework-migrations,Entity Framework,Entity Framework 6,Entity Framework Migrations,我已经看到了,我想知道如何将自动迁移与显式迁移混合应用到生产环境中 假设我按照以下顺序创建迁移: 显式迁移 显式迁移 自动迁移C 显式迁移 由于没有为自动迁移创建任何文件,我们如何确保将在生产环境中创建的自动迁移SQL与在开发机器上创建的SQL相同 我有一种感觉,一旦我们在生产上有了第一个版本,我们就应该完全停止使用自动迁移 我以前曾尝试过此类场景,根据您的迁移顺序,EF将采取以下行动: 当您将所有这些应用于数据库并执行更新数据库-TargetMigration:0时,所有这些都将按照应用的相同

我已经看到了,我想知道如何将自动迁移与显式迁移混合应用到生产环境中

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

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


我有一种感觉,一旦我们在生产上有了第一个版本,我们就应该完全停止使用自动迁移

我以前曾尝试过此类场景,根据您的迁移顺序,EF将采取以下行动:

当您将所有这些应用于数据库并执行更新数据库-TargetMigration:0时,所有这些都将按照应用的相同顺序还原

在执行更新数据库后,所有显式迁移都将应用于数据库,并且假设您已将AutomaticMiggerationsEnabled设置为true;无法应用[Timestamp]\uYourLastMigrationName]\u自动迁移

请注意,EF处理自动迁移的执行顺序!当我在自动迁移中创建一个新表XY时,我认为会出现问题,而下面的显式迁移D可能依赖于该表在数据库和许多其他场景中。但由于迁移中包含数据库快照,EF将能够从这种情况中恢复,并以某种方式重新安排自动迁移


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

只是为了确保,“迁移”指的是继承自System.Data.Entity.Migrations.Dmbmigration并重写上下方法的类?@JozefLačný是的,实际上我不确定它是否真的回答了我的问题,因为既然您提到了更新数据库,我想您在开发机器上进行更新时就是在讨论这个问题。我认为产品环境的情况有所不同,因为所有迁移都是一次性应用的。在开发机器上,EF更容易,因为您必须在创建其他迁移之前调用更新数据库。因此,EF可以检查模型快照等。在生产环境中,您可以一次性从模型A移动到模型D,因此,我想知道它如何在没有快照C的情况下创建正确的自动迁移。C的快照实际上存储在D的resx文件中。在生产中,当您从头开始更新数据库时,根据我们讨论的情况,EF将能够根据我的实验进行恢复。迁移的顺序可能会改变,因为如果以某种方式从resx计算差异和必要的更改,但它会起作用。正如我所说,我个人不会指望它,在我们的团队中,我们严格执行显式迁移。谢谢!是的,我认为坚持显式迁移也是一样的,但是它们被错误地混合在一起了,所以我正在寻找一种方法来处理它。非常感谢