當我使用以下代碼遍歷一個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