方法中使用DbContext ,不能返回IQueryable

比如:

方法

  public static IQueryable<Teacher> GetData()
        {
            using(var db=new MyDbCotext())
            {
                return db.Teachers.Include(x => x.Students);
            }
        }

调用此方法

 var list = GetData();//不加载数据

foreach (var item in list)//在这里才加载数据
{

......

}

执行时会报错:

 

 

 因为IQueryable是延迟加载,程序调用方法但并没加载数据,foreach 时才会去加载,但此时DbContext已销毁了,所以才报错

解决办法:在方法中终结延迟加载即可

        public static List<Teacher> GetDate()
        {
            using(var db=new MyDbCotext())
            {
                return db.Teachers.Include(x => x.Students).ToList<Teacher>();
            }
        }

 如果遇上多个IQueryable遍历嵌套的情况时也会报错,同样可用终结延迟的方法解决即可。

posted @ 2021-07-15 16:56  lunawzh  阅读(75)  评论(0编辑  收藏  举报