【EF学习笔记06】----------加载关联表的数据 延迟加载
2016-08-09 11:23
393 查看
讲解之前,先来看一下我们的数据库结构:班级表 学生表
追踪SQL语句:
说明:主表使用.运算符调用从表都是延迟加载 导航属性需要设置为(virtual)
此处执行了两句SQL 先查询班级表->再查询学生表
追踪SQL语句:
说明:此处执行了5条SQL语句,先查询所有班级,然后根据每个班级ID 查询 各班学生。
执行代码:
结果:
此处只执行了一条SQL,所以未加载出学生信息。
方法二:在Entities上下本类构造函数中调用 Configuration.LazyLoadingEnabled =false
执行结果相同:
延迟加载
//延迟加载 using (var db = new Entities()) { //查询班级 var classes = (from v in db.Classes where v.ClassName == "机电10501" select v).Single(); if (classes.Student != null) { //遍历该班级所有学生 foreach (var st in classes.Student) { ObjectDumper.Write(st.StudentName); } } }
追踪SQL语句:
说明:主表使用.运算符调用从表都是延迟加载 导航属性需要设置为(virtual)
此处执行了两句SQL 先查询班级表->再查询学生表
不恰当的使用延迟加载会发送很多多余的sql
演示程序:遍历所有班级和学生using (var db = new Entities()) { //遍历班级 foreach(var cls in db.Classes) { Console.WriteLine("========="+cls.ClassName); //遍历该班级所有学生 foreach (var st in cls.Student) { ObjectDumper.Write(cls.ClassName + "-" + st.StudentName); } } }
追踪SQL语句:
说明:此处执行了5条SQL语句,先查询所有班级,然后根据每个班级ID 查询 各班学生。
关闭延迟加载有两种方式:
方法一:去掉Virtual修饰 如图执行代码:
结果:
此处只执行了一条SQL,所以未加载出学生信息。
方法二:在Entities上下本类构造函数中调用 Configuration.LazyLoadingEnabled =false
执行结果相同:
相关文章推荐
- EF如何操作内存中的数据以及加载相关联表的数据:延迟加载、贪婪加载、显示加载
- EF如何操作内存中的数据以及加载相关联表的数据:延迟加载、贪婪加载、显示加载
- TreeView数据的延迟加载
- dhtml xgrid实现前台大数据延迟加载效果
- EF5.x Code First 表关联与贪婪加载、延迟加载
- 【项目分析】设计一种前端数据延迟加载的jQuery插件(2)
- 项目分析之:设计一种前端数据延迟加载的jQuery插件(2)
- 网页信息抓取-如何获取延迟加载的网页数据
- Hibernate使用LAZY延迟加载,initialize获取延迟加载关联内容
- 步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数、在不同的DataContext之间做更新、缓存、获取信息、数据加载选项和延迟加载
- 传智播客jpa详解视频教程(七):JPA中的一对多双向关联与级联操作、延迟加载与关系维护
- JPA中的一对多双向关联、级联操作、关系维护、延迟加载
- 数据持久化关联对象加载构想
- 设计一种前端数据延迟加载的jQuery插件(2)
- Entity Framework Code First实体关联数据加载
- 一个延迟加载Tree数据的例子 .
- 一个延迟加载Tree数据的例子
- 步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数、在不同的DataContext之间做更新、缓存、获取信息、数据加载选项和延迟加载
- Hibernate学习26 -- 延迟加载3 -- 关联lazy特征
- DLINQ(LINQ to SQL)之用户自定义函数、在不同的DataContext之间做更新、缓存、获取信息、数据加载选项和延迟加载