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); } }
代码中的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) 编辑 收藏 举报