gpt4 book ai didi

c# - 如何在具有多个分支的项目中管理迁移?

转载 作者:IT王子 更新时间:2023-10-29 03:48:32 25 4
gpt4 key购买 nike

我有一个 ASP.NET MVC3 项目,它使用 Entity Framework 4.3 和代码优先方法。我使用迁移来使数据库保持最新。

该项目受源代码控制,我有多个分支。我刚刚意识到的是,当我想将我的一个分支合并到 master 时会出现问题。由于我在两个分支都创建了migration-files,所以合并的时候会出现migration重叠,很可能会造成冲突。

在多分支的项目中,是否有管理迁移的好方法?

更新

一种方法是合并,然后删除在分支分离时创建的所有迁移文件,然后创建一个新的迁移文件,其中包含从创建分支到合并回分支的所有更改。这将在开发环境中工作,您可以在其中转储数据库并使用所有迁移文件重新构建它。那么问题就是生活环境。由于您无法在没有丢失数据风险的情况下回滚到创建分支的时间,因此当您尝试使用新的迁移文件更新实时数据库时会发生冲突。

最佳答案

有一个much better solution for handling entity framework migration merge conflicts关于类似的问题。

合并后您需要做的就是在目标分支中重新搭建迁移的元数据。也就是说,您没有重新搭建上/下代码,只是 resx 文件中的状态。

add-migration [the_migration_to_rescaffold_metadata_for]

这几乎总是有效。如果合并中的不同迁移以迁移不再可运行或给出意外结果的方式更改了数据库,则该过程将失败。话虽这么说——我认为这是一种非常罕见的情况,因为大多数迁移应该是自动生成的,或者至少不依赖于迁移本身也没有改变的其他表。

rescaffold 状态失败的一种情况可能是:

  • 列 foo 是一个 int,行包含 [0, 1, 2]

  • 从分支 A 迁移 A 将 foo 更改为 bool 值(0 将自动变为 false,并且 > 0会变成真的)

  • 从分支 B 的迁移 B 将 foo 更改为字符串。它期望它是一个 int 但它是一个 bool 值,尽管迁移会成功。数据将丢失,因为创建迁移 B 时行将包含 ["0"、"1"、"2"]。当迁移 A 将列更改为 bool 值(并成功完成并获得预期结果)时,行现在将包含 ["0", "1", "1"] 而不是迁移 B 的最终结果与在中观察到的结果不同分支B。

解决方案可能出现问题的边缘情况可能更多。但是,如果向上/向下迁移代码不依赖于合并中另一个迁移所更改的内容,则只需更新迁移中的元数据就可以很好地工作。

关于c# - 如何在具有多个分支的项目中管理迁移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10556348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com