1.新建两个实体,一个班级有多个学生

public class Student
{
public int StudentId { get; set; }
public string StudentName { get; set; } public Grade Grade { get; set; } } public class Grade
{
public int GradeId { get; set; }
public string GradeName { get; set; }
public string Section { get; set; } public virtual ICollection<Student> Students { get; set; }
}

2.控制台代码

 using (var db = new MyDbContext())
{ db.Database.Log = (sql) => Console.WriteLine(sql); //懒加载 foreach时才会生成Sql语句,导航属性也是如此
foreach (var item in db.Grade)
{
Console.WriteLine($"班级名称:{item.GradeName}");
foreach (var subItem in item.Students)
{
Console.WriteLine($"学生名称:{subItem.StudentName}");
}
} //预先加载 foreach时生成查询一个包含导航属性的查询语句,返回一个大实体,foreach students的不再查询数据库
var grades = db.Grade.Include(g => g.Students);
foreach (var item in grades)
{
Console.WriteLine($"班级名称:{item.GradeName}");
foreach (var subItem in item.Students)
{
Console.WriteLine($"学生名称:{subItem.StudentName}");
}
} //预先加载过滤
db.Configuration.LazyLoadingEnabled = false;
var filterGrades = db.Grade
.Select(g => new
{
g,
Students = g.Students.Where(s => s.StudentId > 0)
})
.AsEnumerable()
.Select(x => x.g);
foreach (var item in filterGrades)
{
Console.WriteLine($"班级名称:{item.GradeName}");
if (item.Students != null)
{
foreach (var subItem in item.Students)
{
Console.WriteLine($"学生名称:{subItem.StudentName}");
}
}
} //显示加载 可以显示的控制加载的导航属性
db.Configuration.LazyLoadingEnabled = false;
var grade = db.Grade.First();
db.Entry(grade).Collection(c => c.Students).Take(1).Load();
Console.WriteLine($"班级名称:{grade.GradeName}");
foreach (var item in grade.Students)
{
Console.WriteLine($"学生名称:{item.StudentName}");
} }

Entity Framework 的懒加载、预先加载、显示加载的更多相关文章

  1. Entity Framework入门教程(8)---预先加载、延迟加载、显示加载

    1.预先加载 预先加载:在对一种类型的实体进行查询时,将相关的实体作为查询的一部分一起加载.预先加载可以使用Include()方法实现. 1.加载一个相关实体类型 栗子:使用Include()方法从数 ...

  2. Entity Framework加载相关实体——延迟加载Lazy Loading、贪婪加载Eager Loading、显示加载Explicit Loading

    Entity Framework提供了三种加载相关实体的方法:Lazy Loading,Eager Loading和Explicit Loading.首先我们先来看一下MSDN对三种加载实体方法的定义 ...

  3. Entity Framework Code First -- 延迟加载和预先加载

    还是以这两个表为例子 country包含零个或多个city, 这个外键关系是我后来加上去,原来没有. 然后再用Power Tool逆向, 产生如下代码 1: using System.Componen ...

  4. Entity Framework Core 懒加载

    众所周知在EF 6 及以前的版本中,是支持懒加载(Lazy Loading)的,可惜在EF Core 并不支持,必须使用Include方法来支持导航属性的数据加载.不过现在EF Core的开发团队打算 ...

  5. Entity Framework Code First实体关联数据加载

    在项目过程中,两个实体数据之间在往往并非完全独立的,而是存在一定的关联关系,如一对一.一对多及多对多等关联.存在关联关系的实体,经常根据一个实体的实例来查询获取与之关联的另外实体的实例. Entity ...

  6. entity framework 数据加载三种方式的异同(延迟加载,预加载,显示加载)

    三种加载方式的区别 显示加载: 显示加载

  7. EF如何操作内存中的数据以及加载相关联表的数据:延迟加载、贪婪加载、显示加载

    之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需要用的,这个系列讲讲如何使用EF操作数据库.老版本的EF主要是通过Ob ...

  8. EF如何操作内存中的数据和加载外键数据:延迟加载、贪婪加载、显示加载

    EF如何操作内存中的数据和加载外键数据:延迟加载.贪婪加载.显示加载 之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需 ...

  9. jquery mobile 请求数据方法执行时显示加载中提示框

    在jquery mobile开发中,经常需要调用ajax方法,异步获取数据,如果异步获取数据方法由于网速等等的原因,会有一个反应时间,如果能在点击按钮后数据处理期间,给一个正在加载的提示,客户体验会更 ...

随机推荐

  1. token的问题汇总

    token的作用:认证.授权: 生成:随机码.时间戳.用户 设备 合成: 验证:是否存在.合成验证: 管理:有效期(服务器存储时间or cookie存储过期时间).展期. token生成:或者和用户信 ...

  2. java 发送http请求

    参考别人的 package test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputS ...

  3. java web设置全局context参数

    先在生成的web.xml文件中配置全局参数变量(Parameter:参数) <web-app> <context-param> 设置parameter(参数)的识别名字为adm ...

  4. idea搭建第一个springboot

    1.打开idea开发工具,在菜单栏选择File-->New-->Project...-->Spring Initializer说明:社区版的idea是没有Spring Initial ...

  5. Python基础(二)数据类型

    (一)数字 Python3中的数字类型分为3种,分别是整型,浮点型以及复数. Python2种的数字类型分为4种,分别是整型,长整型,浮点型以及复数. 其中长整型时Python2为应对位数较大的而设置 ...

  6. PAT_A1111#Online Map

    Source: PAT A1111 Online Map (30 分) Description: Input our current position and a destination, an on ...

  7. eoLinker GoKu Gateway 开源版 V2.1发布,加入UI管理系统等

    GoKu API Gateway 是eoLinker旗下的开源版接口网关,支持OpenAPI与微服务管理,支持私有云部署,实现API转发.请求参数转换.数据校验等功能,提供图形化界面管理,能够快速管理 ...

  8. 15.5.5 【Task实现细节】围绕 await 表达式的控制

    任何 await 表达式均表示执行路径的一个分支.首先,被等待的异步操作得到一个awaiter,然后检查其 IsCompleted 属性.若返回 true ,即可立即获得结果并继续.否则,需进行以下处 ...

  9. [51Nod 1218] 最长递增子序列 V2 (LIS)

    传送门 Description 数组A包含N个整数.设S为A的子序列且S中的元素是递增的,则S为A的递增子序列.如果S的长度是所有递增子序列中最长的,则称S为A的最长递增子序列(LIS).A的LIS可 ...

  10. [luogu4251 SCOI2015] 小凸玩矩阵 (二分图最大匹配)

    传送门 Description Input Output 输出包含一行,为选出的 n 个数中第 k 大数的最小值. Sample Input 输入样例1: 2 3 1 1 2 4 2 4 1 输入样例 ...