11

我已经在一个全新的项目上使用实体框架代码首次迁移一段时间了,到目前为止,它们在应用程序的主干版本上运行良好。

但是,我们现在正处于项目中创建分支的位置,因为我们有多个工作流正在进行。作为最后一批工作的一部分,我们意识到跨分支使用迁移可能会出现问题 - 所以我的问题是人们找到了管理它的最佳方法是什么?

例如(为了讨论,我显然已经简化了这些):

分支 A:开发人员 1 添加了一个“Add-UserDateCreated”迁移,该迁移向用户实体添加了一个字段。迁移文件包含添加字段的代码,并具有当时的模型状态。

分支 B:开发人员 2 添加了一个“Add-UserMiddleName”迁移,该迁移向用户实体添加了另一个字段。迁移文件包含添加字段的代码,并且具有当时的模型状态(但显然没有在其他迁移中添加该字段)。

这些迁移在它们的分支上运行良好,但是当你将它们合并回主干时,你会卡住:

  • 您不能只保留单个迁移文件,因为存储的模型状态将不正确。例如,“Add-UserMiddleName”迁移应该具有添加了“Add-UserDateCreated”字段的模型状态 - 但它不会。
  • 当您遇到相同的问题时,您无法将迁移合并到一个文件中*

这意味着真正避免这些问题的唯一方法是为每个分支处理不同的数据库副本,在合并到主干时忽略迁移,并在合并完成时添加一次性主迁移(在数据库的主干版本) - 但是您最终可能会在一次迁移中进行大量更改,这绝不是一个好主意(并且还会丢失您在迁移类中编写的任何自定义代码)。

那么其他人如何处理这种情况呢?我很想知道其他人的意见。

*我很好奇这实际上会在现实世界中引起什么问题,如果有人知道的话?

4

1 回答 1

6

当您在一个分支上工作并需要迁移时,您总是需要考虑其他(活动)分支的状态。例如,如果主干上存在您在分支上没有的迁移,则应在创建新迁移之前将它们合并到分支。在分支上创建迁移后,将其合并回主干可能是个好主意。

因此,在您的示例中,开发人员 A 和 B 需要相互通信。开发人员 B 意识到需要迁移,应检查是否已完成其他迁移并将它们合并到她的分支,然后再创建“中间用户名”迁移。

我发现将迁移视为整个团队的死锁很有用(如果这对您有意义的话)。应该在日常站立会议中提及新的迁移或创建它们的计划。有时,当事情很忙时,将所有迁移列表保存在白板上供所有团队成员查看可能会很有用。

我还发现迁移是小提交至关重要,这使得它们可以在分支之间轻松移植。

还应该注意的是,它有助于使用一个版本控制系统,该系统擅长分支、合并和挑选,例如 Git。

于 2013-05-10T12:01:22.320 回答