1

我正在从与外键链接的不同表中删除一堆记录。当我调用“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 中删除……为什么?

4

1 回答 1

1

这篇关于 DeleteOnSubmit的文章包含处理级联删除的注释。我们建议您先删除子行,然后删除父实体应该没有问题。

于 2010-09-03T13:35:53.077 回答