代码之家  ›  专栏  ›  技术社区  ›  Hector Minaya

删除实体框架中的子对象

  •  29
  • Hector Minaya  · 技术社区  · 14 年前

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

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

    我明白了:

    Collection was modified; enumeration operation may not execute.
    

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

    1 回复  |  直到 14 年前
        1
  •  80
  •   Morteza Manavi    14 年前

    原因是,当您从上下文中删除对象时,ef会主动更新 雷格斯 导航属性计数,表示 细节.规则 前臂 循环,它总是导致您得到的异常。

    您可以创建一个新的集合对象,并继续从中删除,如下所示:

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

    甚至你也可以通过使用LINQ使它更干净。 前臂 方法:

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