代码优先迁移。在调用 DropForeignKey 之前检查 foreignKey 是否存在
Code First migration. Check if foreignKey exists before calling DropForeignKey
我的项目基于代码优先方法。
我有一个自定义声明的迁移,其中声明了 Up 和 Down 方法(以修复我的项目中以前合并的分支问题)。
之后我尝试了几次回滚并应用我的自定义迁移,- 一切正常。
但是在 teamCity 项目编译期间,它会抛出一个错误,因为它处理迁移的方式与 visual studio 不同,它会尝试回滚 Up 方法,删除不存在的约束,但我在 Up 中有不同的外键和向下方法。
如何在尝试执行 DropForeignKey(...) 之前检查 foreignKey 是否存在?
探索这个假设,我发现问题出在实体之间外键的不正确实现上。
在我的例子中,不正确的迁移已经部署到生产中,所以我的解决方案是:
生成的回滚脚本到有效迁移,其中包含所有不正确的迁移(在程序包管理器控制台中,这是命令:Update-Database -TargetMigration:-Script)
回滚到有效迁移,并生成新的正确迁移脚本。
为了回答你最初的问题,我在 FluentMigration 上找到了一种检查外键是否存在的方法:
Schema.Schema(<yourschema>).Table(<yourtable>).Constraint(<yourFKname>).Exists()
对于完成事项,在 Constraint 方法中,您可以输入任何约束名称,就像方法名称所建议的那样。
这是检查 Table 是否存在的方法:
Schema.Schema(<yourschema>).Table(<yourtable>).Exists()
太糟糕了,我为此迟到了一年,或者...阅读您解决问题的方法,也许不是:)
我的项目基于代码优先方法。
我有一个自定义声明的迁移,其中声明了 Up 和 Down 方法(以修复我的项目中以前合并的分支问题)。
之后我尝试了几次回滚并应用我的自定义迁移,- 一切正常。
但是在 teamCity 项目编译期间,它会抛出一个错误,因为它处理迁移的方式与 visual studio 不同,它会尝试回滚 Up 方法,删除不存在的约束,但我在 Up 中有不同的外键和向下方法。
如何在尝试执行 DropForeignKey(...) 之前检查 foreignKey 是否存在?
探索这个假设,我发现问题出在实体之间外键的不正确实现上。 在我的例子中,不正确的迁移已经部署到生产中,所以我的解决方案是:
生成的回滚脚本到有效迁移,其中包含所有不正确的迁移(在程序包管理器控制台中,这是命令:Update-Database -TargetMigration:-Script)
回滚到有效迁移,并生成新的正确迁移脚本。
为了回答你最初的问题,我在 FluentMigration 上找到了一种检查外键是否存在的方法:
Schema.Schema(<yourschema>).Table(<yourtable>).Constraint(<yourFKname>).Exists()
对于完成事项,在 Constraint 方法中,您可以输入任何约束名称,就像方法名称所建议的那样。
这是检查 Table 是否存在的方法:
Schema.Schema(<yourschema>).Table(<yourtable>).Exists()
太糟糕了,我为此迟到了一年,或者...阅读您解决问题的方法,也许不是:)