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();
我承认这个问题的根源可能在我身上,但我无法得到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();