私は非常に基本的なカテゴリモデルID, RootCategoryID, Name
を持っており、子が多いカテゴリがある場合は削除されないため、これを再帰的に実行する必要がありますが、そうするとエラーが発生します。
接続文字列を追加するMultipleActiveResultSets=true
と回避策があることはわかっていますが、これはコード内から解決できるため、このパラメーターを使用することはお勧めできません。これは本当ですか?
エラー
このコマンドに関連付けられている開いているDataReaderがすでにあり、最初に閉じる必要があります。
コード
public ActionResult Delete(int id)
{
this.DeleteRecursive(id);
_db.SaveChanges();
return RedirectToAction("index", "category");
}
private void DeleteRecursive(int id)
{
// Selecting current category
var currentCategory = _db.Categories.Where(x => x.ID == id).Single(); // this line
var childrenCategories = _db.Categories.Where(x => x.RootCategory.ID == id);
// Check if category has children
if (childrenCategories.Count() > 0)
{
// Loop through children and apply same function recrusively
foreach (var c in childrenCategories)
{
this.DeleteRecursive(c.ID);
}
}
// Category has no children left, delete it
_db.Categories.Remove(currentCategory);
}