gpt4 book ai didi

c# - Entity Framework ;如何处理foreach循环中的异常并不断迭代

转载 作者:太空狗 更新时间:2023-10-29 17:49:43 44 4
gpt4 key购买 nike

当我使用以下代码遍历 foreach 时,它成功捕获了第一个发生的异常并将 id 添加到我的错误列表中。在循环的所有后续迭代中,它将继续捕获先前的异常。

我如何才能适本地捕获异常并撤消或清除失败的 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 和谷歌,大多数人会先处理所有删除对象,然后保存更改,这样它就是一个事务。但我需要它来单独处理每笔交易,因此单个故障不会停止其余交易。

我正在使用 Entity Framework 4。

我在这个特定示例中得到的异常是由于外键与正在删除的项目相关联而导致的。在生产中,我将处理这种情况,无论出现什么异常,它都应该能够继续。

最佳答案

我假设在 this.getValidObject(id) 中使用相同的上下文 this.DB 来检索实体。如果是这样,在异常 block 中调用:this.DB.detach(deleteme)。这应该可以防止 SaveChanges() 尝试在下一次迭代中删除有问题的实体。

关于c# - Entity Framework ;如何处理foreach循环中的异常并不断迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10722244/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com