从数据库中删除带有子条目的对象

本文关键字:对象 数据库 删除 | 更新日期: 2023-09-27 18:02:50

我对Model First和Entity Framework 4.1非常陌生,并且总是创建没有关系的小型数据库,并通过在子表中放置引用字段来暗示这些数据库。我试图给模型第一尝试,并创建了一个数据库,3个表,彼此之间有一对多的关系,所以:祖父->父亲->儿子

当我尝试用以下代码删除时,它不起作用:

DBUpdateException:更新表项时发生错误。详情请参阅内部异常。

代码:

var toDelete = db.Grandfathers.Find(id);
db.GrandFathers.Remove(toDelete);
db.SaveChanges();

但是当我用下面的代码递归地删除它们时,一切都如预期的那样顺利。

db.Grandfathers.Where(g=>g.Id = id).SelectMany(f=>f.Fathers).SelectMany(s=>s.Sons).ToList().ForEach(r => db.Sons.Remove(r));
db.SaveChanges();
db.Grandfathers.Where(g=>g.Id = id).SelectMany(f=>f.Fathers).ToList().ForEach(r => db.Fathers.Remove(r));
db.SaveChanges();
db.Grandfathers.Where(g=>g.Id = id).ToList().ForEach(r => db.Grandfathers.Remove(r));
db.SaveChanges();

我如何删除所有的子记录从祖父记录而不经过所有这些?

从数据库中删除带有子条目的对象

您需要在定义数据库模式时设置级联删除(在您的数据库中,如果您使用数据库优先,或者如果您使用代码优先,请参阅EF5 Code First cascade on delete)或手动删除(顺便说一下,您不需要每次调用SaveChanges())