[英]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.