Entity framework 实体框架迁移未检测到所有更改

Entity framework 实体框架迁移未检测到所有更改,entity-framework,entity-framework-migrations,Entity Framework,Entity Framework Migrations,我承认这个问题的根源可能在我身上,但我无法让实体框架恢复。情况是,我正在创建新的迁移,实体框架并没有检测到模型的所有更改。它检测到一些最新的,但不是以前的,也没有迁移 为什么会这样,是因为我首先对模型做了一些更改,并创建了一个迁移。一切都很完美。然后我再次更改了模型,因为它只在我的开发机器上,所以我删除了以前的迁移并重新创建了它。问题就是从这里开始的。我知道我根本不应该删除迁移,但已经完成了 我有代码优先数据库,所以我决定取消DB LocalDB,取消没有所有更改的最新迁移文件。然后更新数据库并

我承认这个问题的根源可能在我身上,但我无法让实体框架恢复。情况是,我正在创建新的迁移,实体框架并没有检测到模型的所有更改。它检测到一些最新的,但不是以前的,也没有迁移

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

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


所以我认为EF在某个我看不见的地方保存了模型的快照。哪里有没有办法从这种情况中恢复过来,让EF重新创建迁移,并对模型进行丢失的更改

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

因此,您不应该仅仅删除已经应用的迁移的.cs文件。相反,请执行以下操作:

1使用更新数据库-TargetMigration[要删除的迁移之前的迁移名称]回滚旧迁移

2删除旧的migration.cs文件

3使用添加迁移添加新迁移


我希望您的某个地方仍然有已删除的migration.cs文件,否则回滚将出现问题:/如果您从一个新的数据库开始,只需再次使用-TargetMigration参数将其更新到上一个良好的迁移,然后从那里开始。

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

因此,您不应该仅仅删除已经应用的迁移的.cs文件。相反,请执行以下操作:

1使用更新数据库-TargetMigration[要删除的迁移之前的迁移名称]回滚旧迁移

2删除旧的migration.cs文件

3使用添加迁移添加新迁移


我希望您的某个地方仍然有已删除的migration.cs文件,否则回滚会有问题:/n如果您从一个新数据库开始,只需再次使用-TargetMigration参数将其更新到上一个良好的迁移,然后从那里开始。

我使用的是Entity Framework Core,在将数据库更新为以前的迁移,并删除了几次迁移以整合我在解决问题时所做的一批更改之后,我陷入了这种情况。清除所有/bin/obj目录没有帮助,清理也没有帮助


最后我发现它更新了文件{your context name}ModelSnapshot.cs。我恢复了对该文件的所有更改,在下次运行添加迁移时,EF Core最终发现了我所有的模型更改。

我使用的是Entity Framework Core,在将数据库更新到以前的迁移并删除了几次迁移后,我遇到了这种情况,这些迁移旨在整合我在解决问题时所做的一批更改。清除所有/bin/obj目录没有帮助,清理也没有帮助


最后我发现它更新了文件{your context name}ModelSnapshot.cs。我恢复了对该文件的所有更改,在下一次运行Add Migration时,EF Core最终发现了我的所有模型更改。

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

modelBuilder.ApplyConfigurationsFromAssembly();

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

modelBuilder.ApplyConfigurationsFromAssembly();

问题的主要原因似乎是之前的迁移resx文件存储了无效的目标哈希。我还原了原始目标,然后按照您提到的步骤使其工作。问题的主要原因似乎是之前的迁移resx文件中存储了无效的目标哈希。我恢复了原始目标,然后按照您提到的步骤使其工作。