是否可以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();
答案 0 :(得分:4)
拨打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记录。
答案 1 :(得分:0)
LINQ to SQL不支持级联删除操作。您需要告诉数据库本身这样做或者首先自己删除子行。
有关详细说明,请参阅Insert, Update, and Delete Operations (LINQ to SQL)。