35

我们正在使用 TFS,并且我们的 Dev 有不同的分支。

  1. 在分支 A 中,我们进行了迁移以更改列大小

  2. 在分支 B 中,我们进行了迁移以添加新表。这个分支不知道分支A的修改!!

  3. 两个修改都合并到主分支。

当我更新数据库时,它会进行 2 次迁移,但最后告诉我有待处理的更改。如果我进行添加迁移,它会创建与第一次迁移相同的内容(在分支 A 中)。

无法更新数据库以匹配当前模型,因为存在待处理的更改并且自动迁移已禁用。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将 DbMigrationsConfiguration.AutomaticMigrationsEnabled 设置为 true 以启用自动迁移。您可以使用 Add-Migration 命令将挂起的模型更改写入基于代码的迁移。

是否因为我上次迁移的属性 Target de IMigrationMetadata 的内容中缺少某些内容,因为它不知道第一次迁移?

是否可以在不同的 TFS 分支中处理迁移?

4

3 回答 3

36

EF 迁移步骤包含一个元数据文件,该文件具有模型签名,该签名是迁移步骤的结果。合并时的问题是在分支 B 中完成的迁移的签名不包括在分支 A 中的迁移中完成的内容。只要迁移在分支中,这是正确的。合并时会出错。

为了解决这个问题,您必须重新生成后者迁移的元数据

add-migration MyMigrationName

add-migration在没有参数的现有迁移上运行-force将仅重新生成元数据。

我在EF 迁移和我的博客上的合并冲突帖子中写了一个合并场景的深入演练。

于 2012-05-01T06:50:40.107 回答
1

作为对 Anders Abel 答案的补充,对于那些在尝试重新生成最后一个迁移元数据时遇到问题的人,这会导致 EF 创建一个附加了 1 的单独迁移。

您必须包含完整的日期/时间戳。

例如

如果您之前迁移的文件名是201701011322_MakeChangesToPotatoTable

然后,您必须在“添加迁移”命令中正确包含全名。

IE

Add-Migration 201701011322_MakeChangesToPotatoTable
于 2017-02-08T14:20:23.953 回答
0

使用 EF 内核,模型的当前状态保存在 ***ModelSnapshot.cs 中。它通常被合并,所以你没有任何事情可做......除非有冲突。

于 2019-12-02T21:08:14.033 回答