EF 在 MigrationHistory 中创建 InitialCreate 然后打开迁移 & InitialCreate 有一个新的 MigrationId 导致挂起的迁移问题

EF creates InitialCreate in MigrationHistory then migration is turned on & InitialCreate has a new MigrationId causing pending migration issue

我有两个解决方案,没有迁移的基本解决方案(正在生产中,所以我无法擦除数据)现在我已经对此进行了分支以设置迁移并进行一些模型更改。

首先,我需要在分支解决方案(第二个解决方案)上设置迁移,以便我可以应用模型更改,因此我:

所以我删除了创建的数据库,因为我需要 运行 第一个解决方案来创建初始数据库设置(模拟实时)。

当我 运行 第一个解决方案时,它会在 MigrationsHistory table 中创建一个名为 InitialCreate (201807061432030_InitialCreate) 的条目,该条目已自动创建。然后我 运行 在应用我的模型的第二个解决方案上更新数据库变化很好,尽管它们在 InitialCreate MigrationId 中存在差异。

我的第二个解决方案中的迁移条目(按照它们的创建顺序和它们在解决方案中的顺序):
- 201807061257015_InitialCreate
- 201807061315294_InitialBlank
- 201807061323086_add_entity

迁移历史中的迁移条目 table 在 运行 第一个和第二个解决方案之后:

1 | 201807061315294_InitialBlank
2 | 201807061323086_add_entity
3 | 201807061432030_InitialCreate

第二个解决方案 运行 很好,但是当我尝试添加任何数据时,我得到 System.InvalidOperationException: 'The model backing the 'Context' context has changed since数据库已创建。考虑使用代码优先迁移更新数据库

我试图在第二个项目上创建另一个迁移,以确保它们没有未迁移的模型更改(它们不应该),但我收到错误消息。 无法生成显式迁移,因为以下显式迁移处于挂起状态:[201807061257015_InitialCreate]。在尝试生成新的显式迁移之前应用挂起的显式迁移。

我的问题:

  1. 如何解决 MigrationId 不匹配问题?由于第一个解决方案没有打开迁移,当我打开它们时(在第二个解决方案中)它创建了一个新的 id。
  2. 异常 System.InvalidOperationException: '支持 'Context' 的模型是否会因 MigrationId 不匹配而抛出,或者任何人都可以指出我为什么会这样发生了什么?我查看了这个错误,但我发现的解决方案似乎不起作用:
    • 删除迁移历史记录 table 不好,因为由于客户数据,我无法在生产中执行此操作。
    • 我发现的另一个解决方案是将 Database.SetInitializer(null); 添加到 global.asax 似乎没有任何区别。
  3. 为什么我的迁移顺序在迁移历史记录中应用后看起来不一样 table?

提前致谢!

我不确定这是否可行,但我想我可能需要手动删除第一个 InitialCreate 并编辑数据库条目以反映正确的 InitialCreate。基于这个问题,我刚刚找到 .

不过这个星期一我得试试。

编辑: 我首先尝试删除 _MigrationHistory table 中的 InitialMigration 条目,但这不起作用,因为它尝试再次应用 InitialMigrations 但不能作为 tables 已经创建。所以我所做的是更新 InitialMigration 条目的 MigrationId 以反映它在新项目中的内容。

我用的sql: SET MigrationId='201807061257015_InitialCreate' WHERE MigrationId = '201807061432030_InitialCreate'