c# - Linq-to-sql删除带有FK约束的记录

标签 c# .net linq linq-to-sql

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

假设我有对象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/

相关文章:

.net - 将 .Net 类公开给 COM,同时它具有私有(private)泛型类型成员

c# - 处置 WPF 用户控件

c# - 使用 LINQ 获取平均值

c# - Cortana 是否支持 webhooks/调用外部 API?

c# - '&'在xml中怎么写?

c# - 在字符串中使用数组

c# - 我如何确定为什么 Enyim 内存缓存在存储项目时返回 false?

c# - 无法从 web.config 访问自定义配置文件属性?

linq - LINQ和处理回滚

linq - 使用 LINQ 的不同值