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

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类型集合,不会立即执行SQL语句,

这时候再去递归查询会提示连接已经被使用,只有碰到终结方法(ToList、ToArray、MAX、Min、Count等)才会立即执行sql语句。

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

判断终结和非终结方法

一般返回IQueryable类型的是非终结方法(Select、Skip、Take、Where等);反之是终结方法

posted on 2023-08-31 09:10  lovezj9012  阅读(610)  评论(0编辑  收藏  举报

导航