当我使用以下代码遍历一个foreach时,它成功捕获发生的第一个异常,并将该id添加到我的错误列表中。在循环的所有后续迭代中,它将继续捕获以前的异常。实体框架;如何处理foreach循环中的异常并继续迭代
如何正确捕获异常并撤消或清除失败的DeleteObject请求,以便可以执行后续删除。
public ActionResult Delete(int[] ListData)
{
List<int> removed = new List<int>();
List<int> error = new List<int>();
Item deleteMe;
foreach (var id in ListData)
{
deleteMe = this.getValidObject(id);
if (deleteMe == null)
{
error.Add(id);
continue;
}
try
{
this.DB.Items.DeleteObject(deleteMe);
this.DB.SaveChanges();
removed.Add(id);
}
catch (DataException ex)
{
// revert change to this.DB.Items?
error.Add(id);
}
}
if (error.Count > 0)
{
return Json(new { Success = false, Removed = removed, Error = error });
}
return Json(new { Success = true, Removed = removed });
}
我已搜查SO和谷歌,大多数人首先会处理全部删除对象,然后保存更改,以便它是一个交易。但我需要它来单独处理每个事务,因此单个故障不会停止其余事务。
我使用实体框架4.
我得到所造成的外键这个特定的例子唯一的例外是关联到被删除的项目。在生产过程中,我将处理这种情况,无论发生什么异常,它都应该能够继续。
什么是ListData?一个'List <>'或者'IQueryable <>'? –
我已更新代码以显示更多上下文。 – SidewaysGravity