手动更改迁移文件并保持兼容的__migrationhistory记录

Mat*_*ira 6 entity-framework ef-migrations

在使用Entity Framework Code First Migrations时,我和我的团队在尝试保持我们的开发(很快,客户端的生产)数据库与我们的模型同步时遇到了很多问题.

当由于DropForeignKey()方法调用错误而不得不手动编辑迁移代码时,问题似乎开始发生.(我的项目是使用MySQL 5.5,MySQL Connector 6.6.2,EF 4.3.)有问题的命令:

DropForeignKey("Recebimento", "ComponenteFabricante_Id", "CompFab");
Run Code Online (Sandbox Code Playgroud)

改为:

DropForeignKey("Recebimento", "FK_RecebimentoMaterial_CompFab_ComponenteFabricante_Id");
Run Code Online (Sandbox Code Playgroud)

从那时起,每当我尝试时Update-Databse,即使我知道我已经拥有反映当前模型映射的所有迁移代码,也会显示以下消息:"无法更新数据库以匹配当前模型,因为存在待定更改并且自动迁移已禁用.将挂起的模型更改写入基于代码的迁移或启用自动迁移.将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移.您可以使用Add-Migration命令将挂起的模型更改写入代码 - 基于迁移."

我不想用变化AutomaticMigrationEnabledtrue,所以我跑Add-Migration Test看到的是被创造的.创建的文件包含已经应用(通过以前的迁移)到数据库的命令.如果我尝试运行上次迁移,Update-Database则会失败(类似"已存在列"或"表已存在",这是正确的错误消息,因为迁移具有重复的代码).

我怀疑问题与表格__migrationhistory保存在模型列上的值(迁移所应用的模型的二进制表示)有关 - 可能由于进行了手动校正,该值不是正确的值.

如何才能手动编辑迁移代码并使其正常工作?使用Entity Framework Code First迁移时的最佳做法是什么?

arn*_*rni 1

您是否尝试过使用ForeignKey属性在模型中手动指定外键名称?

[ForeignKey("FK_RecebimentoMaterial_CompFab_ComponenteFabricante_Id")]
YourNavigationProperty
Run Code Online (Sandbox Code Playgroud)