繁体   English   中英

Linq-to-sql删除具有FK约束的记录

[英]Linq-to-sql Delete a record with FK constraints

是否可以SubmitChanges并忽略导致外键约束错误的删除?

假设我有对象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();

两次调用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记录。

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

有关详细说明请参阅插入,更新和删除操作(LINQ to SQL)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM