EF的关联实体加载有三种方式:Lazy Loading,Eager Loading,Explicit Loading,其中Lazy Loading和Explicit Loading都是延迟加载。
(一)延迟加载(默认):Lazy Loading使用的是动态代理,默认情况下,如果POCO类满足以下两个条件,EF就使用Lazy Loading:
- POCO类是Public且不为Sealed。
- 导航属性标记为Virtual。
关闭Lazy Loading,可以将LazyLoadingEnabled设为false,如果导航属性没有标记为virtual,Lazy Loading也是不起作用的。
(二)贪婪加载:不设置导航属性为virtual,并且对导航属性使用Include,Eager Loading使用Include方法关联预先加载的实体。
(三)显示加载:不设置导航属性为virtual,并且对导航属性使用Reference(单个对象).Load()或Collection(对象集).Load()。Explicit Loading使用Entry方法,对于集合使用Collection,单个实体则使用Reference。
public class Programm
{
public static void Main()
{
TestDbContext db = new TestDbContext(); //延迟加载
var res1 = db.Reservations;
foreach (var item in res1)
{
//do something
} //贪婪加载
//有多个Include会全部完成加载,生成的sql命令是一条完成的
var res2 = db.Reservations.Include(r => r.Details); //显示加载
var res3 = db.Reservations.ToList();
foreach (var item in res3)
{
var temp = db.Entry(item);
temp.Collection(i => i.Details).Load();
temp.Reference(i => i.Customer).Load();
}
}
} public class Reservation
{
public int ReservationId { get; set; }
public string ClientName { get; set; }
public string Location { get; set; }
public List<ReservationDetails> Details { get; set; }
public Customer Customer { get; set; }
} public class ReservationDetails
{
public int Id { get; set; }
public DateTime Time { get; set; }
} public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
} public class TestDbContext : DbContext
{
public DbSet<Reservation> Reservations { get; set; }
}
暂时COPY记录,有空再整理
原文:
http://www.cnblogs.com/peaceSouth/p/5813646.html
https://www.cnblogs.com/liangxiaofeng/p/5809301.html
http://www.cnblogs.com/nianming/archive/2013/01/09/2846952.html
EF的三种数据加载方式的更多相关文章
-
浅谈Entity Framework中的数据加载方式
如果你还没有接触过或者根本不了解什么是Entity Framework,那么请看这里http://www.entityframeworktutorial.net/EntityFramework-Arc ...
-
三种动态加载js的jquery实例代码另附去除js方法
!-- 这里为你提供了三种动态加载js的jquery实例代码哦,由于jquery是为用户提供方便的,所以利用jquery动态加载文件只要一句话$.getscript("test.js&quo ...
-
3D Slicer中文教程(三)—数据加载及保存方式
1.打开数据与保存数据 (1)打开数据 ——可以将数据拖拽到3D Slicer应用窗口或者从菜单栏工具栏打开. ——多种方式加载大量数据. 有关DICOM数据,请参阅DICOM模块文档. 对于几乎所有 ...
-
TouTiao开源项目 分析笔记8 图解分析数据加载方式
1.整体构架 1.1.以一个段子页面为例,列出用到的主要的类,以图片的方式展示. 1.2.基础类 这里最基础的接口有: IBaseView<T>==>定义了5个方法. 然后最基础 ...
-
第十节: EF的三种追踪实体状态变化方式(DBEntityEntry、ChangeTracker、Local)
一. 简介 我们在前面章节介绍EF基本增删改的时候,曾说过EF的SaveChanges()方法,会一次性的将所有的实体的状态变化统一提交到数据库,那么你是否想过EF的实体会有哪些状态变化呢?什么原因会 ...
-
bootstrap-table插件数据加载方式
data-url 直接使用data-url在table标签中定义 使用load方法加载数据 $(“#finishingTask”).bootstrapTable(‘load’,data); //dat ...
-
三种Spring加载机制
方法一. 在main方法中启动Spring ApplicationContext ac = new XmlApplicationContext("applicationContext.xml ...
-
夺命雷公狗—angularjs—1—三种数据版定方式
我们在实际开发中几乎都是脱离不掉数据绑定方式的,绑定方法如下所示: <!DOCTYPE html> <html lang="en" ng-app> < ...
-
Spring在Web项目中的三种启动加载的配置
在最近的项目中,使用到了spring相关的很多东西,有点把spring的配置给搞混了,从网上查到的资料以及整理了一下. 在Web项目中,启动spring容器的方式有三种,ContextLoaderLi ...
随机推荐
-
spring-cloud-event-sourcing-example-master 运行效果及说明
1.微服务架构下电商示例,部署成功!监控等技术细节未深入研究. 简单介绍: 配置服务(config-service ),端口8888,健康检查 xx:8888/hea ...
-
【noiOJ】p8211 (PS:二分浮点数的精度问题)
05:派 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 我的生日要到了!根据习俗,我需要将一些派分给大家.我有N个不同口味.不同大小的派.有F个朋友会来参加 ...
-
poj 3635 Full Tank? ( 图上dp )
题意: 已知每一个点的加油站的油价单位价格(即点权).每条路的长度(边权). 有q个询问.每一个询问包含起点s.终点e和油箱容量. 问从起点走到终点的最小花费.假设不可达输出impossible,否则 ...
-
Java服务器热部署的实现原理
转自:http://blog.csdn.net/chenjie19891104/article/details/42807959 在web应用开发或者游戏服务器开发的过程中,我们时时刻刻都在使用热部署 ...
-
关于jq操作table下多个type=radio的input的选中
假如有2个table: <table id="table1" border="0"> <tr> <td><input ...
-
Android SDK Web SDK 接口测试总结
什么是SDK SDK就是一个程序,提供一些方法,调用这些方法,可以实现一些功能.如:调用银行提供的SDK,可以实现在线支付的功能. 目前主要接手的SDK有js SDK 和android SDK.JS ...
-
SQL - for xml path(&#39;&#39;) 实现多行合并到一行, 并带有分隔符
docs.microsoft.com 链接: SQL一个应用场景与FOR XML PATH应用 首先呢!我们在增加一张学生表,列分别为(stuID,sName,hobby),stuID代表学生编号, ...
-
Main Thread Checker 问题解决
1. without a return value https://developer.apple.com/documentation/code_diagnostics/main_thread_che ...
-
将jar包添加到本地maven仓库中
在使用maven依赖添加jar包时,有时会遇到下载不成功的问题,这时需要将jar手动添加到本地的maven仓库中. 准备工作 配置好maven的环境变量 已经下载好的jar包 具体过程 win + R ...
-
1643【例 3】Fibonacci 前 n 项和
1643:[例 3]Fibonacci 前 n 项和 时间限制: 1000 ms 内存限制: 524288 KB sol:这题应该挺水的吧,就像个板子一样 1 0 01 1 0 * ...