由于外键约束,实体框架迁移无法删除表 [英] Entity Framework Migrations can't drop table because of foreign key constraint

查看:69
本文介绍了由于外键约束,实体框架迁移无法删除表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经将现有数据库反向工程为代码优先模型。一些表将保留,但大多数表将被删除,并为新版本完全重新构造。

I have reverse-engineered the existing database to the code-first model. Some tables are to be kept but most are to be removed and completely re-architected for the new version.

我删除了一些旧类及其映射和添加迁移。

I delete some old classes and their mapping and add-migration.

迁移看起来像这样:

  public override void Up()
        {
            DropForeignKey("dbo.Bingo_Review", "BingoID", "dbo.Bingo");
            DropForeignKey("dbo.Bingo_Review_Text", "BingoReviewID", "dbo.Bingo_Review");
            DropForeignKey("dbo.Bingo_Bonus", "BingoID", "dbo.Bingo");
            DropForeignKey("dbo.Bingo_Bonus_Amount", "BingoBonusID", "dbo.Bingo_Bonus");
            DropIndex("dbo.Bingo_Bonus", new[] { "BingoID" });
            DropIndex("dbo.Bingo_Review", new[] { "BingoID" });
            DropIndex("dbo.Bingo_Review_Text", new[] { "BingoReviewID" });
            DropIndex("dbo.Bingo_Bonus_Amount", new[] { "BingoBonusID" });
            DropTable("dbo.Bingo_Bonus");
            DropTable("dbo.Bingo");
            DropTable("dbo.Bingo_Review");
            DropTable("dbo.Bingo_Review_Text");
            DropTable("dbo.Bingo_Bonus_Amount");
            DropTable("dbo.Bingo_Bonus_Type");
        }

但是,当我运行迁移时,在程序包管理器控制台中出现以下错误

However when I run the migration, I get the following error in package manager console.

Could not drop object 'dbo.Bingo_Bonus' because it is referenced by a FOREIGN KEY constraint.

当迁移在删除表之前应该已经删除了任何外键时,为什么会出现此错误命令?

Why do I get this error when the migration should have already dropped any foreign keys prior to the drop table command? Is there any way around this?

推荐答案

如果 dbo.Bingo_Bonus 表名称曾经更改过,或者如果外键关系中的任何列已更改,EF不会自动重命名外键约束以使其匹配。我有一个类似的问题,我不得不手动添加这样的行,因为 DropForeignKey()函数实际上并没有删除应该被删除的键:

If the dbo.Bingo_Bonus table name has ever changed, or if any of the columns in the foreign key relationships have changed, EF does not rename the foreign key constraints automatically to match. I had a similar problem and I had to manually add a line like this because the DropForeignKey() function was not actually deleting the key it was supposed to:

Sql(@"ALTER TABLE [dbo].[MyTable] DROP CONSTRAINT [FK_dbo.Constraint_Name_From_Before_Table_Change]");

这篇关于由于外键约束,实体框架迁移无法删除表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆