gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:46:20 25 4
gpt4 key购买 nike

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

由于错误的 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 , 即使我知道我已经拥有反射(reflect)当前模型映射的所有迁移代码 ,将显示以下消息:“无法更新数据库以匹配当前模型,因为存在挂起的更改并且禁用了自动迁移。请将挂起的模型更改写入基于代码的迁移或启用自动迁移。将 DbMigrationsConfiguration.AutomaticMigrationsEnabled 设置为true 启用自动迁移。
您可以使用 Add-Migration 命令将挂起的模型更改写入基于代码的迁移。”

我不想使用更改 AutomaticMigrationEnabledtrue ,所以我运行 Add-Migration Test查看创建的内容。创建的文件包含已(通过先前的迁移)应用于数据库的命令。如果我尝试运行最后一次迁移, Update-Database失败(类似于“列已经存在”或“表已经存在”,这是正确的错误消息,因为迁移有重复的代码)。

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

我该怎么做才能手动编辑迁移代码并使其正常工作?使用 Entity Framework Code First 迁移时的最佳实践是什么?

最佳答案

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

[ForeignKey("FK_RecebimentoMaterial_CompFab_ComponenteFabricante_Id")]
YourNavigationProperty

关于entity-framework - 手动更改迁移文件并保持兼容的 __migrationhistory 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13366572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com