使用数据库中的子条目删除对象

时间:2014-05-12 15:41:34

标签: c# entity-framework

我对Model First和Entity Framework 4.1非常陌生,并且始终创建没有关系的小型数据库,并通过在子表中放置引用字段来暗示这些数据库。我尝试尝试使用Model First,并创建了一个包含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();

如何在不经历所有这些的情况下从祖父记录中删除所有子记录?

1 个答案:

答案 0 :(得分:2)

您需要在定义数据库模式时设置级联删除(如果您使用Database First,则在数据库中设置;如果使用Code First,则需要查看EF5 Code First Cascade on delete)或者按照您的方式手动删除(顺便提一下)不需要每次都调用SaveChanges()。