我有以下行动方法: -
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
在我的内部不会达到行动方法?可以任何一个建议可能是什么问题?
感谢
答案 0 :(得分:2)
我想这是因为你在一个集合中使用了foreach
,你通过删除成员间接修改了这个集合。
在单独的集合上运行foreach
可能会有所帮助,因为删除后您的枚举不会失效:
var toDelete = technology.TMSSwitchPorts.ToList();
foreach (var switchport in toDelete)
{
tms.TMSSwitchPorts.Remove(switchport);
}