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検索とGoogleとほとんどの人が最初にすべての削除オブジェクトを処理し、それが1つのトランザクションであるように、変更を保存しますしています。しかし、個々のトランザクションを個別に処理する必要があるため、単一の障害によって残りのトランザクションが停止することはありません。
私は、Entity Frameworkの4
私が削除されているアイテムに関連付けられている外部キーによって引き起こされるこの特定の例のために得る例外を使用しています。私はこのシナリオを処理する予定ですが、例外が何であっても継続することができます。
ListDataとは何ですか? 'List <>'か 'IQueryable <>'か? –
私はより多くの文脈を示すためにコードを更新しました。 – SidewaysGravity