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

C# 代码优先迁移。在调用DropForeignKey之前检查foreignKey是否存在,c#,entity-framework-migrations,C#,Entity Framework Migrations,我的项目基于代码优先的方法 我有一个自定义声明的迁移,使用声明的Up和Down方法(修复项目中以前合并的分支问题) 在那之后,我多次尝试回滚并应用我的自定义迁移,-所有这些都很好 但在teamCity项目编译期间,它抛出了一个错误,因为它与visual studio处理迁移的方式不同,并且它尝试回滚方法,删除不存在的约束,但我在Up和Down方法中有不同的外键 在尝试执行DropForeignKey(…)之前,我如何检查foreignKey是否存在?我发现,探究这个假设,问题在于实体之间的外键实

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

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

在那之后,我多次尝试回滚并应用我的自定义迁移,-所有这些都很好

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


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

我发现,探究这个假设,问题在于实体之间的外键实现不正确。 就我而言,不正确的迁移已经部署到生产环境中,因此我的解决方案是:

  • 生成的回滚脚本,用于所有错误迁移的有效迁移(在Package Manager控制台中,这是命令:Update Database-TargetMigration:-script)

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


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

Schema.Schema(<yourschema>).Table(<yourtable>).Constraint(<yourFKname>).Exists()
Schema.Schema().Table().Constraint().Exists()
对于完成问题,您可以在约束方法中放置任何约束名称,正如方法名称所示

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

Schema.Schema(<yourschema>).Table(<yourtable>).Exists()
Schema.Schema().Table()存在()
可惜我迟到了一年,或者。。。阅读你解决问题的方法,也许不是:)