2015-11-17 144 views
0

我试图运行的实体框架(v6.1.3)的迁移与下面的代码更新:实体框架说,外国键犯规存在,但它确实

public override void Up() 
{ 
    Sql("IF EXISTS (SELECT name FROM sys.foreign_keys WHERE name = 'FK_MyTable_MyOtherTable') " + 
     "ALTER TABLE dbo.MyTable DROP FK_MyTable_MyOtherTable"); 
} 

但它不断抛出下面的时候我的错误运行update-database命令:

'FK_MyTable_MyOtherTable'不是一个约束。无法丢弃的约束。查看以前的错误。

如果我在SQL Server Management Studio中运行SQL,则不会显示错误,并且会丢弃外键。

编辑:刚刚测试此代码的下方,它的工作原理也是如此。有什么不同?

public override void Up() 
{ 
    DropForeignKey("dbo.MyTable", "FK_MyTable_MyOtherTable"); 
} 
+1

试试'ALTER TABLE dbo.MyTable DROP CONSTRAINT FK_MyTable_MyOtherTable' – DavidG

+0

你可能会写一个不正确的表名或者fk名 –

+0

你能检查最后得到的字符串是什么,可能需要包含一些空格。 – Baskar

回答

0

我重新启动SQL Express和VS2015,似乎清除了问题。