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

时间:2016-06-29 07:57:49

标签: entity-framework ef-migrations

我承认这个问题的根源可能在我身上,但我无法让实体框架恢复"恢复"。情况是我创建了新的迁移,而Entity Framework没有检测到我的模型的所有变化。它检测到一些(最新的),但不检测以前的(没有迁移)。

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

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

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

3 个答案:

答案 0 :(得分:1)

正如您已经发现的,EF保留了一个Hashcode来跟踪迁移之间的模型更改。您可以通过查看数据库中的[dbo].[__MigrationHistory]表来查看此内容。

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

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

回滚旧迁移

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

3)使用Add-Migration

添加新迁移

我希望您仍然可以在某处删除迁移的.cs文件,否则回滚将会出现问题:/如果您从一个新的数据库开始,只将其更新为上一次良好的迁移(再次使用-TargetMigration参数并从那里开始。

答案 1 :(得分:0)

我正在使用Entity Framework Core ,并且在Update-Database之后进入上一次迁移后遇到了这种情况,并删除了一些迁移(打算合并在解决问题时所做的一批更改) 。清除所有/ bin / obj目录无济于事,清理也不起作用。

最终,我发现它更新了文件{您的上下文名称} ModelSnapshot.cs。我将所有更改都还原到了该文件,而当我下次运行Add-Migration时,EF Core终于发现了所有模型更改。

答案 2 :(得分:-1)

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

modelBuilder.ApplyConfigurationsFromAssembly();