如何关闭检查约束并使用Entity Framework从表中删除所有数据?

时间:2018-01-10 14:30:59

标签: sql-server entity-framework

我有一个表需要与原始文件同步。这个表有外键,所以我需要禁用检查并删除所有现有数据。

这就是我所拥有的。

int i = db.Database.ExecuteSqlCommand("ALTER TABLE " + table + "  NOCHECK Constraint All");          
db.Database.ExecuteSqlCommand("DELETE FROM " + table);

错误

  

类型' System.Data.SqlClient.SqlException'的异常发生在   EntityFramework.SqlServer.dll但未在用户代码中处理

     

其他信息:DELETE语句与   参考约束" FK_CUST"。冲突   发生在数据库" table",table" dbo.table"。

声明已经终止。

该声明已被终止。 为什么没有上述工作?我该怎么做?

1 个答案:

答案 0 :(得分:1)

1)您正在禁用要删除的表的约束,但其他表可能依赖于该表。即使您禁用删除该表的所有必要约束,在删除它之后,您将无法重新启用约束。您还需要删除相关的表行。

2)如果您需要完全删除表格,请始终使用TRUNCATE。

如何禁用和启用所有表格的约束:

-- Disable all constraints for database
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

-- Enable all constraints for database
EXEC sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"

来源:https://blog.sqlauthority.com/2014/12/02/sql-server-how-to-disable-and-enable-all-constraint-for-table-and-database/