Code First迁移。在调用DropForeignKey之前检查foreignKey是否存在

时间:2015-08-24 08:40:11

标签: c# ef-migrations

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

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

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

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

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

2 个答案:

答案 0 :(得分:3)

要回答您的原始问题,我在FluentMigration上找到了检查外键是否存在的方法:

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

对于完成事项,在Constraint方法中,您可以放置​​任何约束名称,就像方法名称所示。

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

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

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

答案 1 :(得分:0)

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

  • 生成回滚脚本到有效迁移且迁移不正确(在Package Manager Console中这是命令:Update-Database -TargetMigration:-Script)

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