EFCore 连接MySQL数据库查询数据提示This MySqlConnection is already in use

发布时间 2023-08-31 09:16:37作者: lovezj9012

EFCore 连接数据查询数据提示"This MySqlConnection is already in use"代码如下

using (MyDBContext db =new MyDBContext())
{
        Order order= db.Orders.Single(o => o.Id==2);
        printChildren(1, db, order);
}

static void printChildren(int depLevel,MyDBContext ctx,Order ou)
{
    var children = ctx.Orders.Where(o => o.Parent == ou);
    foreach (var child in children)
    {
        Console.WriteLine(new String('\t', depLevel) + child.Name);
        //递归
        printChildren(depLevel + 1, ctx, child);
    }
}
View Code

 

代码中的var children = ctx.Orders.Where(o => o.Parent == ou)只是将代码转换为SQL语句,返回的结果为IQueryable类型集合,结果会延迟加载,这时候再去递归查询会提示连接已经被使用。

将代码改为var children = ctx.Orders.Where(o => o.Parent == ou).ToList()返回的类型是IEnumerable类型集合是将数据加载到本地内存中