我有一个表需要与原始文件同步。这个表有外键,所以我需要禁用检查并删除所有现有数据。
这就是我所拥有的。
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"。
声明已经终止。
该声明已被终止。 为什么没有上述工作?我该怎么做?
答案 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"