EF在MigrationHistory中创建InitialCreate,然后打开迁移并且InitialCreate有一个新的MigrationId导致挂起的迁移问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EF在MigrationHistory中创建InitialCreate,然后打开迁移并且InitialCreate有一个新的MigrationId导致挂起的迁移问题相关的知识,希望对你有一定的参考价值。
我有两个解决方案,没有迁移的基本解决方案(正在生产中,因此我无法擦除数据)现在我已经将其分支以设置迁移并进行一些模型更改。
首先,我需要在分支解决方案(第二个解决方案)上设置迁移,以便我可以应用模型更改,因此我:
- 启用自动创建InitialMigration Enable-Migrations -ContextTypeName Context的迁移
- 根据https://www.apress.com/gp/blog/all-blog-posts/secular-trends-for-the-cloud/12097630 Add-Migration InitialBlank -IgnoreChanges的建议进行空白迁移
- 更新数据库*更新数据库*
- 让我的模型改变
- 添加包含我的模型更改的迁移* Add-Migration add_entity *
- 运行Update-Database
所以我删除创建的数据库,因为我需要运行第一个解决方案来创建初始数据库设置(模拟实时)。
当我运行第一个解决方案时,它会在名为InitialCreate(201807061432030_InitialCreate)的MigrationsHistory表中创建一个已自动创建的条目。然后我在第二个解决方案上运行update-database,它可以很好地应用我的模型更改,尽管它们在InitialCreate MigrationId中存在差异。
我的第二个解决方案中的迁移条目(按照它们的创建顺序和它们在解决方案中的顺序): - 201807061257015_InitialCreate - 201807061315294_InitialBlank - 201807061323086_add_entity
运行第一个和第二个解决方案后,迁移历史记录表中的迁移条目:
1 | 201807061315294_InitialBlank 2 | 201807061323086_add_entity 3 | 201807061432030_InitialCreate
第二个解决方案运行正常,但是当我尝试添加任何数据时,我得到System.InvalidOperationException:'自创建数据库以来,支持'Context'上下文的模型已更改。考虑使用Code First Migrations来更新数据库。
我试图在第二个项目上创建另一个迁移,以确保它们没有未迁移的模型更改(它们不应该是)但我收到错误。由于以下显式迁移未决,因此无法生成显式迁移:[201807061257015_InitialCreate]。在尝试生成新的显式迁移之前应用挂起的显式迁移。
我的问题:
- 如何解决MigrationId不匹配问题?由于第一个解决方案没有打开迁移,当我打开它们时(在第二个解决方案中)它会创建一个新的id。
- 异常System.InvalidOperationException:'支持'Context'的模型会被MigrationId不匹配抛出,或者有人能指出我为什么会发生这种情况?我已经看过这个错误,但我找到的解决方案似乎不起作用: 删除迁移历史记录表并不好,因为客户数据无法在生产中执行此操作。 我发现添加Database.SetInitializer(null)的另一个解决方案;到global.asax似乎没什么区别。
- 为什么我的迁移顺序在迁移历史记录表中应用后会有所不同?
提前致谢!
我不确定这是否可行,但我想我可能需要手动删除第一个InitialCreate并编辑db条目以反映正确的InitialCreate。基于这个问题我刚刚找到了https://stackoverflow.com/a/13108243/3172635。
我将不得不尝试这个星期一。
编辑:我首先尝试删除_MigrationHistory表中的InitialMigration条目,但这不起作用,因为它尝试再次应用InitialMigrations但不能因为表已经创建。所以我所做的是更新InitialIigration条目的MigrationId以反映它在新项目中的含义。
我使用的sql:SET MigrationId ='201807061257015_InitialCreate'WHERE MigrationId ='201807061432030_InitialCreate'
以上是关于EF在MigrationHistory中创建InitialCreate,然后打开迁移并且InitialCreate有一个新的MigrationId导致挂起的迁移问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 Database.Create 的对象名称“dbo.__MigrationHistory”无效;传入连接字符串时的EF6.02