Entity Framework 迁移未检测到所有更改

Entity Framework Migrations not detecting all the changes

我承认这个问题的根源可能在我身上,但我无法得到Entity Framework到"recover"。情况是我正在创建新的迁移并且 Entity Framework 没有检测到我的模型的所有更改。它检测到一些(最新的),但没有检测到以前的(也没有迁移)。

为什么会这样,是我先对模型做了一些修改,创建了一个migration。一切都很完美。然后我再次更改模型,因为它只在我的开发机器上,所以我删除了之前的迁移并重新创建了它。这就是问题开始的地方。我知道我根本不应该删除迁移,但该做的已经做完了。

我有代码优先数据库,所以我决定核对数据库 (LocalDB),核对最新的迁移文件(没有所有更改)。然后更新数据库并尝试添加新的迁移。仍然不是所有的变化。

所以我认为 EF 在我看不到的地方保留了某种模型快照。在哪里?任何想法如何从这种情况中恢复并让 EF 重新创建具有模型缺失更改的迁移?

正如您已经发现的那样,EF 保留一个哈希码来跟踪迁移之间的模型更改。您可以通过查看数据库中的 [dbo].[__MigrationHistory] table 来了解这一点。

因此,您不应该只是简单地删除已应用的迁移的 .cs 文件。而是执行以下操作:

1) 使用 Update-Database -TargetMigration [Name of the migration right before the migration you want to delete]

回滚旧迁移

2) 删除旧的迁移 .cs 文件

3) 使用 Add-Migration

添加新迁移

我希望您仍然在某处有已删除的迁移 .cs 文件,否则回滚将证明有问题:/如果您从一个新的数据库开始,只将它更新到最后一次良好的迁移(使用 -TargetMigration参数)并从那里开始。

我用的是Entity Framework Core, Update-Database 到之前的一个migration, 删除了几个migration(打算合并一个batch)后出现这种情况我在解决问题时所做的更改)。清除所有 /bin /obj 目录没有帮助,清理也没有帮助。

最终我发现它会更新文件{您的上下文名称}ModelSnapshot.cs。我恢复了对该文件的所有更改,并且 EF Core 终于在下次我 运行 添加迁移时发现了我所有的模型更改。

您应该将此代码行插入到 OnModelCreating 方法中

modelBuilder.ApplyConfigurationsFromAssembly();