EF在MigrationHistory中创建InitialCreate,然后启用迁移,并且InitialCreate具有新的MigrationId,从而导致挂起的迁移问题

时间:2018-07-06 15:05:43

标签: c# entity-framework migration ef-migrations

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

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

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

当我运行第一个解决方案时,它会在MigrationsHistory表中创建一个名为InitialCreate(201807061432030_InitialCreate)的条目,该条目已自动创建。然后,我在第二个解决方案上运行update-database,该解决方案可以很好地应用我的模型更改,尽管它们在InitialCreate MigrationId中存在差异。

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

运行第一个然后是第二个解决方案后,迁移历史记录表中的迁移条目:

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

第二个解决方案运行良好,但是当我尝试添加任何数据时,我得到 System.InvalidOperationException:自创建数据库以来,支持“ Context”上下文的模型已更改。考虑使用代码优先迁移来更新数据库

我试图在第二个项目上创建另一个迁移,以确保它们不是尚未迁移的模型更改(应该不应该),但是出现错误。 无法生成显式迁移,因为以下显式迁移正在处理中:[201807061257015_InitialCreate]。在尝试生成新的显式迁移之前,请先应用待处理的显式迁移。

我的问题:

  1. 如何解决MigrationId不匹配?由于第一个解决方案没有启用迁移,而当我确实启用迁移(在第二个解决方案中)时,它将创建一个新的ID。
  2. 是否可能发生异常 System.InvalidOperationException:“迁移ID”不匹配引发“支持“上下文”的模型” ,或者有人可以指出为什么会发生这种情况吗?我已经研究了此错误,但是发现的解决方案似乎不起作用:
    • 删除迁移历史记录表是不好的,因为由于客户数据,我无法在生产中执行此操作。
    • 我发现向global.asax添加 Database.SetInitializer(null); 的另一种解决方案似乎没有什么区别。
  3. 为什么将迁移顺序应用于迁移历史记录表后,它们的迁移顺序看起来会有所不同?

谢谢!

1 个答案:

答案 0 :(得分:0)

我不确定这是否行得通,但我想我可能需要手动删除第一个InitialCreate并编辑数据库条目以反映正确的InitialCreate。基于这个问题,我刚刚发现了https://stackoverflow.com/a/13108243/3172635

不过我必须在这个星期一尝试。

编辑:我首先尝试删除_MigrationHistory表中的InitialMigration条目,但这不起作用,因为它试图再次应用InitialMigrations,但由于已经创建了表,因此无法。因此,我要做的就是更新InitialMigration条目的MigrationId,以反映新项目中的状态。

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