代码优先迁移.在调用DropForeignKey之前检查foreignKey是否存在

本文关键字:检查 foreignKey 是否 存在 DropForeignKey 迁移 调用 代码 | 更新日期: 2023-09-27 18:09:35

我的项目是基于代码优先的方法。

我有一个自定义声明的迁移,带有声明的Up和Down方法(以修复我的项目中先前合并的分支问题)。

之后,我尝试了几次回滚并应用我的自定义迁移,-所有工作正常。

但是在teamCity项目编译期间,它抛出了一个错误,因为它与迁移不同,而不是visual studio,它试图回滚Up方法,删除不存在的约束,但我在Up和Down方法中有不同的外键。

在尝试执行DropForeignKey(…)之前,我如何检查foreignKey是否存在?

代码优先迁移.在调用DropForeignKey之前检查foreignKey是否存在

为了回答您最初的问题,我在FluentMigration上找到了一种检查外键存在的方法:

Schema.Schema(<yourschema>).Table(<yourtable>).Constraint(<yourFKname>).Exists()

对于补全问题,在Constraint方法中,您可以输入任何约束名称,正如方法名称所暗示的那样。

这是用来检查表是否存在的方法:

Schema.Schema(<yourschema>).Table(<yourtable>).Exists()

太糟糕了,我迟到了一年,或者…阅读你的方式来解决你的问题,也许不是:)

探索这个假设,我发现,问题在于实体之间外键的错误实现。在我的例子中,错误的迁移已经部署到生产环境中,所以我的解决方案是:

  • 生成回滚脚本到所有错误迁移的有效迁移(在包管理器控制台中,这是命令:Update-Database -TargetMigration: -Script)

  • 回滚到一个有效的迁移,并生成新的正确的迁移脚本。