EF 在 MigrationHistory 中创建 InitialCreate 然后打开迁移 & InitialCreate 有一个新的 MigrationId 导致挂起的迁移问题
EF creates InitialCreate in MigrationHistory then migration is turned on & InitialCreate has a new MigrationId causing pending migration issue
我有两个解决方案,没有迁移的基本解决方案(正在生产中,所以我无法擦除数据)现在我已经对此进行了分支以设置迁移并进行一些模型更改。
首先,我需要在分支解决方案(第二个解决方案)上设置迁移,以便我可以应用模型更改,因此我:
- 打开自动创建 InitialMigration 的迁移
启用迁移-ContextTypeName 上下文
- 根据https://www.apress.com/gp/blog/all-blog-posts/secular-trends-for-the-cloud/12097630的建议进行空白迁移
添加迁移 InitialBlank -IgnoreChanges
- 更新数据库*更新数据库*
- 修改我的模型
- 添加包含我的模型更改的迁移 * 添加迁移 add_entity*
- 运行 更新数据库
所以我删除了创建的数据库,因为我需要 运行 第一个解决方案来创建初始数据库设置(模拟实时)。
当我 运行 第一个解决方案时,它会在 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]。在尝试生成新的显式迁移之前应用挂起的显式迁移。
我的问题:
- 如何解决 MigrationId 不匹配问题?由于第一个解决方案没有打开迁移,当我打开它们时(在第二个解决方案中)它创建了一个新的 id。
- 异常 System.InvalidOperationException: '支持 'Context' 的模型是否会因 MigrationId 不匹配而抛出,或者任何人都可以指出我为什么会这样发生了什么?我查看了这个错误,但我发现的解决方案似乎不起作用:
- 删除迁移历史记录 table 不好,因为由于客户数据,我无法在生产中执行此操作。
- 我发现的另一个解决方案是将 Database.SetInitializer(null); 添加到 global.asax 似乎没有任何区别。
- 为什么我的迁移顺序在迁移历史记录中应用后看起来不一样 table?
提前致谢!
我不确定这是否可行,但我想我可能需要手动删除第一个 InitialCreate 并编辑数据库条目以反映正确的 InitialCreate。基于这个问题,我刚刚找到 .
不过这个星期一我得试试。
编辑: 我首先尝试删除 _MigrationHistory table 中的 InitialMigration 条目,但这不起作用,因为它尝试再次应用 InitialMigrations 但不能作为 tables 已经创建。所以我所做的是更新 InitialMigration 条目的 MigrationId 以反映它在新项目中的内容。
我用的sql:
SET MigrationId='201807061257015_InitialCreate' WHERE MigrationId = '201807061432030_InitialCreate'
我有两个解决方案,没有迁移的基本解决方案(正在生产中,所以我无法擦除数据)现在我已经对此进行了分支以设置迁移并进行一些模型更改。
首先,我需要在分支解决方案(第二个解决方案)上设置迁移,以便我可以应用模型更改,因此我:
- 打开自动创建 InitialMigration 的迁移 启用迁移-ContextTypeName 上下文
- 根据https://www.apress.com/gp/blog/all-blog-posts/secular-trends-for-the-cloud/12097630的建议进行空白迁移 添加迁移 InitialBlank -IgnoreChanges
- 更新数据库*更新数据库*
- 修改我的模型
- 添加包含我的模型更改的迁移 * 添加迁移 add_entity*
- 运行 更新数据库
所以我删除了创建的数据库,因为我需要 运行 第一个解决方案来创建初始数据库设置(模拟实时)。
当我 运行 第一个解决方案时,它会在 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]。在尝试生成新的显式迁移之前应用挂起的显式迁移。
我的问题:
- 如何解决 MigrationId 不匹配问题?由于第一个解决方案没有打开迁移,当我打开它们时(在第二个解决方案中)它创建了一个新的 id。
- 异常 System.InvalidOperationException: '支持 'Context' 的模型是否会因 MigrationId 不匹配而抛出,或者任何人都可以指出我为什么会这样发生了什么?我查看了这个错误,但我发现的解决方案似乎不起作用:
- 删除迁移历史记录 table 不好,因为由于客户数据,我无法在生产中执行此操作。
- 我发现的另一个解决方案是将 Database.SetInitializer(null); 添加到 global.asax 似乎没有任何区别。
- 为什么我的迁移顺序在迁移历史记录中应用后看起来不一样 table?
提前致谢!
我不确定这是否可行,但我想我可能需要手动删除第一个 InitialCreate 并编辑数据库条目以反映正确的 InitialCreate。基于这个问题,我刚刚找到 .
不过这个星期一我得试试。
编辑: 我首先尝试删除 _MigrationHistory table 中的 InitialMigration 条目,但这不起作用,因为它尝试再次应用 InitialMigrations 但不能作为 tables 已经创建。所以我所做的是更新 InitialMigration 条目的 MigrationId 以反映它在新项目中的内容。
我用的sql: SET MigrationId='201807061257015_InitialCreate' WHERE MigrationId = '201807061432030_InitialCreate'