删除实体框架中的子对象

hmi*_*aya 29 entity-relationship entity-framework-4

我正在使用EF,当我这样做时:

            foreach (var reg in detail.Regs)
            {
                this.db.Regs.DeleteObject(reg);
            }
Run Code Online (Sandbox Code Playgroud)

我明白了:

Collection was modified; enumeration operation may not execute.
Run Code Online (Sandbox Code Playgroud)

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

Mor*_*avi 80

原因是当您从上下文中删除对象时,EF会主动更新Regs导航属性计数,这意味着在foreach循环期间正在更改detail.Regs集合,这总是会导致您获得异常. 您可以创建一个新的集合对象,并像这样继续删除它:

foreach (var reg in detail.Regs.ToList())
{
    this.db.Regs.DeleteObject(reg);
}
Run Code Online (Sandbox Code Playgroud)

或者甚至可以使用LINQ ForEach方法使其更清洁:

detail.Regs.ToList().ForEach(r => db.Regs.DeleteObject(r));
Run Code Online (Sandbox Code Playgroud)