我正在从与外键链接的不同表中删除一堆记录。当我调用“SubmitChanges”时,收到以下错误:
DELETE 语句与 REFERENCE 约束 FK_PTXProductMap_CustomerProduct”冲突。冲突发生在数据库“SOTI”、表“dbo.PTXProductMap”、列“InstanceId”中。语句已终止。
我用探查器查看了当 SubmitChanges 尝试保存更改并且没有为 2 条记录调用 DELETE SQL 操作时执行了哪些查询。我 100% 确定为他们调用了 linq2sql-'DELETE' 操作(我在该行设置了一个断点:
IEnumerable<CustomerProduct> products = DbContext.CustomerProducts
.Where(cp => cp.InstanceId == transition.InstanceId
|| cp.InstanceId == transition.PreInstanceId);
foreach (CustomerProduct cp in products)
{
DbContext.CustomerProducts.DeleteOnSubmit(cp);
}
并检查是否为所需的 cp 对象调用了它。DELETE 被要求为同一张表中的另外 2 条记录...但不是所有必需的
你知道为什么会这样吗?以及如何解决?
欢迎任何想法。
PS 我在 64 位 Windows 7 下使用 VS2008 SP1、MS SQL 2005
PPS 我在另一个表中检测到很少有记录链接到已删除范围......包括他们的删除解决了当前错误,但仍不清楚为什么没有为所有要删除的记录生成“删除”操作。
PPPS 另一对表的情况非常相似:表 A 包含 1 条记录,表 B - 3 条引用 A.1 的记录它们无法在一个事务中删除,但如果我手动删除它们(通过 Management Studio)我可以从 B 中删除 3 条记录,然后从 A 中删除……为什么?