在使用 Entity Framework Code First 迁移时,我和我的团队在尝试使我们的开发(以及客户的生产)数据库与我们的模型保持同步时遇到了很多问题。
由于 DropForeignKey() 方法调用错误,当我不得不手动编辑迁移代码时,问题似乎开始发生了。(我的项目使用 MySQL 5.5、MySQL Connector 6.6.2、EF 4.3。)有问题的命令:
DropForeignKey("Recebimento", "ComponenteFabricante_Id", "CompFab");
改为:
DropForeignKey("Recebimento", "FK_RecebimentoMaterial_CompFab_ComponenteFabricante_Id");
从那以后,每次我尝试这样做时Update-Databse
,即使我知道我已经拥有反映当前模型映射的所有迁移代码,也会显示以下消息:“无法更新数据库以匹配当前模型,因为有待处理的更改和自动迁移已禁用。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将 DbMigrationsConfiguration.AutomaticMigrationsEnabled 设置为 true 以启用自动迁移。您可以使用 Add-Migration 命令将挂起的模型更改写入代码-基于迁移。”
我不想使用 change AutomaticMigrationEnabled
to true
,所以我跑来Add-Migration Test
看看创建了什么。创建的文件包含已经(通过以前的迁移)应用到数据库的命令。如果我尝试运行最后一次迁移,Update-Database
则会失败(类似于“列已存在”或“表已存在”,这是正确的错误消息,因为迁移具有重复的代码)。
我怀疑这个问题与表__migrationhistory
保存在 Model 列上的值(迁移应用的模型的二进制表示)有关 - 由于进行了手动更正,因此该值可能不是正确的值。
我该怎么做才能手动编辑迁移代码并使其正常工作?使用 Entity Framework Code First 迁移时的最佳实践是什么?