我已经多次成功地完成了这种程序,但是第一次,它似乎不起作用。我想合并我的应用程序的两个分支,它们具有不同的代码优先迁移状态。我知道在两个版本的开发过程中,模式在两个版本中都发生了变化,导致了不同的快照,所以我需要重新搭建我的合并迁移以匹配数据库快照,基本上是 following this guide, Option 2 .在给定的项目中,我有几十个迁移,其中多个已按照描述成功合并和重新构建。
所以我正在做的是将数据库状态带到迁移之前的数据库版本(例如 Update-Database -targetMigration 201511261243087_BeforeMigration
,指南的第 4 步)并重新搭建合并的迁移正确的顺序,以便他们可以重新构建元数据。
当我使用命令 Add-Migration 201512170931290_FirstMergedMigration
时,我收到以下错误消息:
Unable to generate an explicit migration because the following explicit migrations are pending: [201512170931290_FirstMergedMigration, 201512140935307_SecondMergedMigration]. Apply the pending explicit migrations before attempting to generate a new explicit migration.
什么?我没想到会这样。我期待命令重新构建现有迁移的元数据并更新架构快照。但假设我想添加一个新的迁移。 -force
标志也无济于事。
当我按照推荐的步骤更新数据库
时,EF 将创建一个新的迁移,名为:201512210931290_201512170931290_FirstMergedMigration
。这真是太疯狂了。
我希望有一个单独的命令来重新构建元数据,这样它可能会显示更清晰的错误消息。
有人以前见过这个吗?
更新:
查看我的 own answer .
最佳答案
好的,看来我在这里发现了问题...这似乎是我尝试重新搭建的第一次迁移,不包含任何架构更改,因为它只是添加索引等。似乎 EF 会尝试如果未检测到给定迁移中的更改,则添加新迁移。我能够做的是跳过那个迁移,继续下一个,结果是预期的:
Only the Designer Code for migration '201512140935307_SecondMergedMigration' was re-scaffolded. To re-scaffold the entire migration, use the -Force parameter.
我检查了数据库,__MigrationHistory
看起来不错,表也不错。如果 EF 生成了更好的错误消息,而不是尝试在我显然试图重新搭建的地方添加新迁移,这将意味着更少的麻烦。
关于c# - EntityFramework EF 不让我重新搭建脚手架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34396084/