Entity Framework 的懒加载、预先加载、显示加载
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 的懒加载、预先加载、显示加载的更多相关文章
- Entity Framework入门教程(8)---预先加载、延迟加载、显示加载
1.预先加载 预先加载:在对一种类型的实体进行查询时,将相关的实体作为查询的一部分一起加载.预先加载可以使用Include()方法实现. 1.加载一个相关实体类型 栗子:使用Include()方法从数 ...
- Entity Framework加载相关实体——延迟加载Lazy Loading、贪婪加载Eager Loading、显示加载Explicit Loading
Entity Framework提供了三种加载相关实体的方法:Lazy Loading,Eager Loading和Explicit Loading.首先我们先来看一下MSDN对三种加载实体方法的定义 ...
- Entity Framework Code First -- 延迟加载和预先加载
还是以这两个表为例子 country包含零个或多个city, 这个外键关系是我后来加上去,原来没有. 然后再用Power Tool逆向, 产生如下代码 1: using System.Componen ...
- Entity Framework Core 懒加载
众所周知在EF 6 及以前的版本中,是支持懒加载(Lazy Loading)的,可惜在EF Core 并不支持,必须使用Include方法来支持导航属性的数据加载.不过现在EF Core的开发团队打算 ...
- Entity Framework Code First实体关联数据加载
在项目过程中,两个实体数据之间在往往并非完全独立的,而是存在一定的关联关系,如一对一.一对多及多对多等关联.存在关联关系的实体,经常根据一个实体的实例来查询获取与之关联的另外实体的实例. Entity ...
- entity framework 数据加载三种方式的异同(延迟加载,预加载,显示加载)
三种加载方式的区别 显示加载: 显示加载
- EF如何操作内存中的数据以及加载相关联表的数据:延迟加载、贪婪加载、显示加载
之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需要用的,这个系列讲讲如何使用EF操作数据库.老版本的EF主要是通过Ob ...
- EF如何操作内存中的数据和加载外键数据:延迟加载、贪婪加载、显示加载
EF如何操作内存中的数据和加载外键数据:延迟加载.贪婪加载.显示加载 之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需 ...
- jquery mobile 请求数据方法执行时显示加载中提示框
在jquery mobile开发中,经常需要调用ajax方法,异步获取数据,如果异步获取数据方法由于网速等等的原因,会有一个反应时间,如果能在点击按钮后数据处理期间,给一个正在加载的提示,客户体验会更 ...
随机推荐
- Linux 之根目录介绍
1. /bin binary二进制 存放系统许多可执行程序文件 执行的相关指令,例如ls pwd whoami,后台的支持文件目录 2. /sbin super binary超级的二进制 存放系统许多 ...
- 小程序viewflex布局的对齐不对的问题
index.wxml: <view class="container"> <view class="nav-container"> &l ...
- 数据库操作(一)DML
1.数据库 数据库可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增.查询.更新.删除等操作. 所谓“数据库”是以一定方式储存在一起.能与多个用户共享.具有尽可能小的冗余度.与 ...
- socket主要函数介绍
1. 基本套接字函数(1)socket函数原型 socket(建立一个socket文件描述符) 所需头文件 #include <sys/types.h> #include <sy ...
- 【剑指Offer】7、斐波那契数列
题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).假设n<=39. 解题思路: 斐波那契数列:0,1,1,2,3, ...
- Codeforces Round #548 (Div. 2) C. Edgy Trees
You are given a tree (a connected undirected graph without cycles) of
- 线程同步、信号量、system v IPC
一.线程同步 条件变量 什么是条件变量? 线程A等待某个条件成立,条件成立,线程A才继续向下执行.线程B的执行使条件成立,条件成立以后唤醒线程A,以继续执行.这个条件就是条件变量. pthread_c ...
- 51nod1126 求递推序列的第N项【递推】
有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A,B和N,求f(n)的值. Input 输 ...
- Linux思维导图之查找命令
常用查找命令的区别:
- js给对象onclick事件赋值
1)当方法没有参数时,赋值可以直接用onclick = 方法名 window.onload = function() { $('btnTest').onclick = test; } function ...