2015-08-24 25 views
0

我的项目基于代码优先的方法。Code First迁移。在调用DropForeignKey之前检查是否存在foreignKey

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

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

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

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

回答

0

探索这个假设,我发现,这个问题是不正确的实体之间的外键实现。 在我的情况下,不正确的迁移已经已经部署到生产,所以我的解决办法是:

  • 生成回滚脚本与所有不正确的迁移有效的迁移(在包管理器控制台,这是命令:Update-数据库-TargetMigration:-Script)

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

1

要在你原来的问题回答,我发现FluentMigration办法检查外键的存在:

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

完成的事项,在约束方法,你可以把任何约束名,就像方法名称所示。

这反而是检查是否存在表的方式:

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

太糟糕了,我晚了一年对于这一点,或...阅读自己的方式来解决你的问题,也许不是: )

相关问题