无法循环并删除子记录

时间:2013-12-06 12:20:33

标签: c# entity-framework asp.net-mvc-4

我有以下行动方法: -

try
{  
   repository.DeleteServer(id, ADusername);
   repository.Save();

   return Json(new { IsSuccess = "True", id = id, description = tag }, JsonRequestBehavior.AllowGet);
}

将调用以下存储库方法来删除对象: -

public void DeleteServer(int id,string username)
{
            var server = tms.TMSServers.SingleOrDefault(a=>a.TMSServerID == id);
            var auditinfo = IntiateTechnologyAudit(tms.AuditActions.SingleOrDefault(a => a.Name.ToUpper() == "DELETE").ID,
                    server.Technology.TechnologyType.AssetTypeID,
                 username, server.TMSServerID);
            var technology = tms.Technologies.Include(a=>a.TMSSwitchPorts).SingleOrDefault(a => a.TechnologyID == id);
            technology.IsDeleted = true;
            tms.Entry(technology).State = EntityState.Modified;
            tms.TMSServers.Remove(server);
            foreach (var switchport in technology.TMSSwitchPorts)
            {
                tms.TMSSwitchPorts.Remove(switchport);
            }
            InsertOrUpdateTechnologyAudit(auditinfo);
 }

我面临的问题是foreach,它不会执行删除,也不会引发异常。当我调试我的代码时,action方法将调用deleteserver方法,然后当代码到达foreach时,它将不会迭代技术.TMSSwtichPort代替代码将中断而没有错误并且.save在我的内部不会达到行动方法?可以任何一个建议可能是什么问题? 感谢

1 个答案:

答案 0 :(得分:2)

我想这是因为你在一个集合中使用了foreach,你通过删除成员间接修改了这个集合。

在单独的集合上运行foreach可能会有所帮助,因为删除后您的枚举不会失效:

var toDelete = technology.TMSSwitchPorts.ToList();
foreach (var switchport in toDelete)
{
    tms.TMSSwitchPorts.Remove(switchport);
}