删除一条带有FK约束的记录

本文关键字:约束 记录 FK 一条 删除 | 更新日期: 2023-09-27 18:09:18

是否可以提交更改并忽略导致外键约束错误的删除?

假设我有对象A和B。B的主键是A中的外键。现在我更改记录A,其中我将B替换为另一个B并删除原始B。当删除的B在另一个记录A(或其他包含B作为外键的表)中引用时,将发生错误。是否有可能忽略这个错误,让数据库进行更改,而不删除旧的B?

A rec_a = (from a in db.As where a.id == some_id).First();
B rec_b_old = rec_a.B;
rec_a.B = null;
db.Bs.DeleteOnSubmit(rec_b_old);
rec_a.B = some_other_b;
db.SubmitChanges();

删除一条带有FK约束的记录

呼叫SubmitChanges():

A rec_a = (from a in db.As where a.id == some_id).First();
B rec_b_old = rec_a.B;
rec_a.B = null;
rec_a.B = some_other_b;
db.SubmitChanges();
db.Bs.DeleteOnSubmit(rec_b_old);
try
{
    db.SubmitChanges();
}
catch(SqlException) { } // Ignore failed delete.

第二个可能会失败,在这种情况下,忽略它。可以尝试提交所有内容,找出失败的更新/删除,将其从未决列表中删除,然后重试。然而,它需要更多的代码,所以我认为不值得在这里做。

另一个解决方案是在a表上添加一个触发器,如果B记录是孤立的,则删除B记录。

LINQ to SQL不支持级联删除操作。您需要告诉数据库本身这样做,或者先自己删除子行。

请参见插入、更新和删除操作(LINQ to SQL)的详细说明。