【问题标题】:Adding foreign key on database with existing records on Prodution. Migration approaches using Entity Framework在数据库中添加外键,并使用生产中的现有记录。使用实体框架的迁移方法
【发布时间】:2025-12-03 06:50:02
【问题描述】:

在某些情况下,例如当您向表中添加新外键或删除外键时,您可能会出现一些外键约束错误。为了解决这个问题,我们需要从数据库中删除所有记录,并且迁移工作正常。

这种方法在开发环境中是完美的,但我们不能在生产环境中这样做。

是否有关于实体框架的指南或在生产中处理实体框架的方法?

【问题讨论】:

  • 我只看到了一种修复损坏的 ID 的方法。例如在源表中使用此标识符创建记录或删除目标表中的无效记录。

标签: c# entity-framework production-environment


【解决方案1】:

基本上,创建迁移功能是为了使数据库与应用程序保持同步,而不管应用程序运行的环境如何。由于迁移脚本显然应该以有条理和功能性的方式创建以避免冲突或数据丢失,因此您有时可能需要手动修改自动生成的冲突迁移脚本(查看向上() 最近添加的迁移类的方法和寻找可疑的MigrationBuilder 命令)。

但是,您很可能会遇到由数据库本身引发的错误。请注意:

  • 如果要删除 FK 列,则会引发 依赖错误,这意味着必须尽快删除约束。
  • 如果要添加 FK 列,由于新字段没有有效值并且可能设置为非空属性,数据库将无法在现有记录和目标表之间进行约束。在这种情况下,需要将字段创建为可为空的。另见this question

TLDR;

您不需要删除现有的数据库,只需在模型架构或迁移脚本中发现可能的冲突并解决它们即可。

【讨论】:

    最近更新 更多