显式加载
讲解之前,先来看一下我们的数据库结构:班级表 学生表
加载从表集合类型
//显示加载 Console.WriteLine("=========查询集合==========="); using (var db = new Entities()) { var query = from v in db.Classes where v.ClassName == "机电10501" select v; var cls = query.Single(); db.Entry(cls).Collection(v => v.Student).Load();//加载集合使用Collection方法 Console.WriteLine("==========="+cls.ClassName); foreach (var stu in cls.Student) { Console.WriteLine(stu.StudentName); } //IsLoaded方法判断数据是否已经加载 Console.WriteLine(db.Entry(cls).Collection(v => v.Student).IsLoaded); }
追踪SQL语句
说明:此处执行了2条SQL,先查询班级 再查询该班级学生
加载集合使用Collection方法,Entry的参数为单个实体
执行结果:
加载关联表单个实体
//显示加载 Console.WriteLine("=========查询单个实体==========="); using (var db = new Entities()) { var student = db.Student.First(); db.Entry(student).Reference(v => v.Classes).Load();//加载单个实体使用Reference方法 Console.WriteLine(student.StudentName); Console.WriteLine(student.Classes.ClassName); }
追踪SQL语句
说明:此处执行2条SQL,先查询第一个学生 top (1),再查询该学生班级。
说明:显式加载不需要标记为virtual
按需加载 只查询部分字段
//按需查询 using (var db = new Entities()) { var query = from v in db.Student select new { id=v.StudentID, name=v.StudentName }; foreach (var st in query) { ObjectDumper.Write(st); } }
追踪SQL语句:
说明:生成的SQL语句只查询了 StudentID 和 StudentName 两个字段。