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.
The migration looks like this:
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?
Use the
DropForeignKey()
override that takes the name of the Foreign Key.And like the other responses mention, if the table has been changed, you can use the original name.
Thanks @akl22 for providing this in a comment.
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 theDropForeignKey()
function was not actually deleting the key it was supposed to:You cannot drop
Bingo_Bonus
table, because it still has references toBingo_Bonus_Amount
andBingo_Bonus_Type
tables, changing the order in the Up() method will solve the problemby putting :
before:
Your code will be:
I was able to drop using GUI. When tried to run the query with alter , the '.' symbol was having some error displayed