我已经在一个全新的项目上使用了Entity Framework代码优先迁移一段时间了,并且它们在应用程序的主干版本上一直运行良好。
然而,现在我们处于项目的分支创建阶段,因为我们有多个工作流。作为最后一次工作的一部分,我们意识到在分支之间使用迁移可能会有问题 - 所以我的问题是人们发现管理这种情况的最佳方式是什么?
例如(我显然简化了这些内容以供讨论):
A分支:Developer 1添加了“Add-UserDateCreated”迁移,该迁移向User实体添加字段。迁移文件包含添加字段的代码,并具有当时的模型状态。
B分支:Developer 2添加了“Add-UserMiddleName”迁移,该迁移向User实体添加另一个字段。迁移文件包含添加字段的代码,并具有当时的模型状态(但它显然没有在其他迁移中添加的字段)。
这些迁移在它们的分支上正常工作,但是当您将它们合并回主干时,您就被卡住了:
您不能只保留单个迁移文件,因为存储的模型状态将不正确。例如,“Add-UserMiddleName”迁移应具有添加“Add-UserDateCreated”字段的模型状态-但它不会。
您不能将迁移合并为一个文件,因为您会遇到同样的问题*
这意味着真正避免这些问题的唯一方法是为每个分支使用不同的数据库副本,在将其合并回主干时忽略迁移,并在完成合并时(在数据库的主干版本上)添加一次性主迁移-但是这可能会导致一个迁移中有很多更改,这从来不是一个好主意(并且还会失去您在迁移类中编写的任何自定义代码)。
那么其他人如何管理这种情况?我很想知道其他人的意见。
*如果有人知道实际世界中会引起什么问题,请告诉我。
然而,现在我们处于项目的分支创建阶段,因为我们有多个工作流。作为最后一次工作的一部分,我们意识到在分支之间使用迁移可能会有问题 - 所以我的问题是人们发现管理这种情况的最佳方式是什么?
例如(我显然简化了这些内容以供讨论):
A分支:Developer 1添加了“Add-UserDateCreated”迁移,该迁移向User实体添加字段。迁移文件包含添加字段的代码,并具有当时的模型状态。
B分支:Developer 2添加了“Add-UserMiddleName”迁移,该迁移向User实体添加另一个字段。迁移文件包含添加字段的代码,并具有当时的模型状态(但它显然没有在其他迁移中添加的字段)。
这些迁移在它们的分支上正常工作,但是当您将它们合并回主干时,您就被卡住了:
您不能只保留单个迁移文件,因为存储的模型状态将不正确。例如,“Add-UserMiddleName”迁移应具有添加“Add-UserDateCreated”字段的模型状态-但它不会。
您不能将迁移合并为一个文件,因为您会遇到同样的问题*
这意味着真正避免这些问题的唯一方法是为每个分支使用不同的数据库副本,在将其合并回主干时忽略迁移,并在完成合并时(在数据库的主干版本上)添加一次性主迁移-但是这可能会导致一个迁移中有很多更改,这从来不是一个好主意(并且还会失去您在迁移类中编写的任何自定义代码)。
那么其他人如何管理这种情况?我很想知道其他人的意见。
*如果有人知道实际世界中会引起什么问题,请告诉我。