gpt4 book ai didi

c# - 递归删除类别引发数据读取器异常

转载 作者:行者123 更新时间:2023-11-30 22:21:29 32 4
gpt4 key购买 nike

我有非常基本的类别模型 ID, RootCategoryID, Name 如果我的类别有很多 child 它不会删除所以我需要递归地做这个但是当我这样做时我得到错误.

我知道如果我在连接字符串中添加 MultipleActiveResultSets=true 有一个解决方法,但据我所知,这可以从代码中解决,使用这个参数不是一个好主意。这是真的吗?

错误

There is already an open DataReader associated with this Command which must be closed first.

代码

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);
}

最佳答案

您要为 childrenCategories 语句打开 DataReader

除了异常,这意味着您执行了两次查询 - 一次获取计数,然后再次获取数据。

这应该可以解决问题:

var childrenCategories = _db.Categories
.Where(x => x.RootCategory.ID == id)
.ToList()
;

这会执行 SQL 语句并将所有记录具体化到一个 List 中。
因此,您的数据已存储在内存中,DataReader 已完成。

关于c# - 递归删除类别引发数据读取器异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14325929/

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