是否可以提交更改并忽略导致外键约束错误的删除?
假设我有对象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 记录。
关于c# - Linq-to-sql删除带有FK约束的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7520223/