方法中使用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遍历嵌套的情况时也会报错,同样可用终结延迟的方法解决即可。