在Entity Framework中删除子对象

29

我正在使用 EF,当我执行以下操作:

            foreach (var reg in detail.Regs)
            {
                this.db.Regs.DeleteObject(reg);
            }

我得到了这个:

Collection was modified; enumeration operation may not execute.

我在这里做错了什么???

1个回答

80
那是因为当你从上下文中删除对象时,EF会积极地更新Regs导航属性计数,这意味着在foreach循环期间detail.Regs集合正在被更改,这总是会导致你遇到的异常。

你可以创建一个新的集合对象,并像这样不断地从其中删除:
foreach (var reg in detail.Regs.ToList())
{
    this.db.Regs.DeleteObject(reg);
}

你甚至可以使用 LINQ 的 ForEach 方法来让它更加简洁:

detail.Regs.ToList().ForEach(r => db.Regs.DeleteObject(r));

那么这只是从数据库中获取所有记录再将它们删除了,对吧? - MeTitus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接