Sql 实体框架迁移-在分支中管理

Sql 实体框架迁移-在分支中管理,sql,sql-server,entity-framework,entity-framework-migrations,Sql,Sql Server,Entity Framework,Entity Framework Migrations,我在一个全新的项目中使用Entity Framework code first迁移已有一段时间了,到目前为止,它们在应用程序的主干版本上运行良好 然而,我们现在正处于项目中创建分支的阶段,因为我们有多个工作流正在进行。作为上一批工作的一部分,我们意识到跨分支使用迁移可能会有问题——所以我的问题是,人们找到了管理这种迁移的最佳方法是什么 例如(为了讨论,我显然简化了这些步骤): 分支机构A: 开发人员1添加了一个“AddUserDateCreated”迁移,该迁移将向用户实体添加一个字段。迁移文件

我在一个全新的项目中使用Entity Framework code first迁移已有一段时间了,到目前为止,它们在应用程序的主干版本上运行良好

然而,我们现在正处于项目中创建分支的阶段,因为我们有多个工作流正在进行。作为上一批工作的一部分,我们意识到跨分支使用迁移可能会有问题——所以我的问题是,人们找到了管理这种迁移的最佳方法是什么

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

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

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

这些迁移在它们的分支上工作得很好,但当您将它们合并回主干时,您会陷入困境:

  • 您不能只保留单个迁移文件,因为存储的模型状态不正确。例如,“AddUserMiddleName”迁移应该具有添加了“AddUserDateCreated”字段的模型状态,但不会
  • 遇到同一问题时,无法将迁移合并到一个文件中*
这意味着真正避免这些问题的唯一方法是为每个分支处理不同的数据库副本,在合并到主干时忽略迁移,并在合并完成时添加一次性主迁移(在数据库的主干版本上)-但是,在一次迁移中可能会有很多更改,这绝不是一个好主意(而且还会丢失在迁移类中编写的任何自定义代码)

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


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

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

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

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

我还发现,迁移是小型提交,这一点非常重要,使它们能够在分支之间轻松移植


还应该注意的是,使用一个能够很好地进行分支、合并和挑选的版本控制系统(例如Git)会有所帮助。

谢谢Martin,这是另一种很有用的方法。我想我以前从未想过像这样“随用随变”地合并更改,通常选择在所有更改合并回主干后重新构建所有迁移。我想问题是哪种方式更好?:)