收集被修改;尝试删除子记录时,枚举操作可能无法执行

时间:2014-06-20 13:47:46

标签: linq entity-framework asp.net-mvc-5

我的asp.net mvc&中有以下方法:实体frameowrk: -

public void DeleteRack(int id,string username)
        {
            var rack = ITSys.ITSysRacks.Include(a=>a.Technology.ITSysSwitchPorts).SingleOrDefault(a => a.ITSysRackID == id);

            foreach (var s in rack.Technology.ITSysSwitchPorts)
            {
                ITSys.ITSysSwitchPorts.Remove(s);

            }
            rack.Technology.IsDeleted = true;
            ITSys.Entry(rack.Technology).State = EntityState.Modified;


            ITSys.ITSysRacks.Remove(rack);
            InsertOrUpdateTechnologyAudit(auditinfo);
        }

我想要做的是我想通过循环删除所有子记录,但这会在第一个foreach之后引发以下异常: -

Collection was modified; enumeration operation may not execute

我尝试将值复制到列表中并且工作正常,但我不确定导致此异常的原因是什么?因为我想循环收集并删除记录? 谢谢

1 个答案:

答案 0 :(得分:2)

异常说明了一切:当您枚举枚举类型时,可能无法修改枚举类型。 因此,如果要删除多个元素,请不要在foreach中执行,而是使用RemoveRange

ITSys.ITSysSwitchPorts.RemoveRange(rack.Technology.ITSysSwitchPorts);