EF的关联实体加载有三种方式:Lazy Loading,Eager Loading,Explicit Loading,其中Lazy LoadingExplicit Loading都是延迟加载。

(一)延迟加载(默认):Lazy Loading使用的是动态代理,默认情况下,如果POCO类满足以下两个条件,EF就使用Lazy Loading:

  1. POCO类是Public且不为Sealed。
  2. 导航属性标记为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的三种数据加载方式的更多相关文章

  1. 浅谈Entity Framework中的数据加载方式

    如果你还没有接触过或者根本不了解什么是Entity Framework,那么请看这里http://www.entityframeworktutorial.net/EntityFramework-Arc ...

  2. 三种动态加载js的jquery实例代码另附去除js方法

    !-- 这里为你提供了三种动态加载js的jquery实例代码哦,由于jquery是为用户提供方便的,所以利用jquery动态加载文件只要一句话$.getscript("test.js&quo ...

  3. 3D Slicer中文教程(三)—数据加载及保存方式

    1.打开数据与保存数据 (1)打开数据 ——可以将数据拖拽到3D Slicer应用窗口或者从菜单栏工具栏打开. ——多种方式加载大量数据. 有关DICOM数据,请参阅DICOM模块文档. 对于几乎所有 ...

  4. TouTiao开源项目 分析笔记8 图解分析数据加载方式

    1.整体构架 1.1.以一个段子页面为例,列出用到的主要的类,以图片的方式展示. 1.2.基础类 这里最基础的接口有:   IBaseView<T>==>定义了5个方法. 然后最基础 ...

  5. 第十节: EF的三种追踪实体状态变化方式(DBEntityEntry、ChangeTracker、Local)

    一. 简介 我们在前面章节介绍EF基本增删改的时候,曾说过EF的SaveChanges()方法,会一次性的将所有的实体的状态变化统一提交到数据库,那么你是否想过EF的实体会有哪些状态变化呢?什么原因会 ...

  6. bootstrap-table插件数据加载方式

    data-url 直接使用data-url在table标签中定义 使用load方法加载数据 $(“#finishingTask”).bootstrapTable(‘load’,data); //dat ...

  7. 三种Spring加载机制

    方法一. 在main方法中启动Spring ApplicationContext ac = new XmlApplicationContext("applicationContext.xml ...

  8. 夺命雷公狗—angularjs—1—三种数据版定方式

    我们在实际开发中几乎都是脱离不掉数据绑定方式的,绑定方法如下所示: <!DOCTYPE html> <html lang="en" ng-app> < ...

  9. Spring在Web项目中的三种启动加载的配置

    在最近的项目中,使用到了spring相关的很多东西,有点把spring的配置给搞混了,从网上查到的资料以及整理了一下. 在Web项目中,启动spring容器的方式有三种,ContextLoaderLi ...

随机推荐

  1. TensorRT&Sample&Python[end_to_end_tensorflow_mnist]

    本文是基于TensorRT 5.0.2基础上,关于其内部的end_to_end_tensorflow_mnist例子的分析和介绍. 1 引言 假设当前路径为: TensorRT-5.0.2.6/sam ...

  2. 本文详解5G是个什么鬼,程序员都准备好了吗?

    无线移动通讯发展历史 最近5G的概念炒的如火如荼,为此,华为和高通还干了一仗.这篇文章从技术层面给大家分析,什么是5G,它和4G比,高级在哪里? 我们来看看移动互联网的技术发展: 然后我们在来看看他们 ...

  3. Linux命令1

     1.获取当前系统支持的所有命令的列表: compgen ­-c  2.怎样查看一个linux命令的概要与用法: whatis grep #便可查到grep的用法 3.怎样一页一页地查看一个大文件的内 ...

  4. jenkins集成python时出现"Non-ASCII character '\xe6' in file"错误解决方法

    我的问题: 使用python3.5,在Linux环境下手动执行python文件时不报错,但是用jenkins自动执行时就报"Non-ASCII character '\xe6' in fil ...

  5. windows平台上用python 远程线程注入,执行shellcode

    // 转自: https://blog.csdn.net/Jailman/article/details/77573990import sys import psutil import ctypes ...

  6. redis优化

    一.配置文件优化 bind 127.0.0.1 //允许连接的ip,如果就本机连接最后127.0.0.1 protected-mode yes //是否开启保护模式.默认开启,如果没有设置bind项的 ...

  7. Djangon

    2.怎么样从浏览器获得用户输入的数据? request.浏览器的八种申请方式.get(条件) request.浏览器的八种申请方式[] request.浏览器的八种申请方式(这里什么也不要写)> ...

  8. Django+Vue打造购物网站(十)

    首页.商品数量.缓存和限速功能开发 将环境切换为本地,vue也切换为本地 轮播图 goods/serializers.py class BannerSerializer(serializers.Mod ...

  9. [SCOI2006] 数字立方体

    题目类型:三维前缀和+同余方程 传送门:>Here< 题意:给出一个立方体,求有多少个子立方体的和为\(k\)的倍数 解题思路 暴力做法:\(O(n^6)\)枚举子立方体 考虑只枚举长和宽 ...

  10. Nim积解法小结

    由于某毒瘤出题人 redbag 不得不学习一下这个史诗毒瘤算法. 本文参考了 Owaski 的 GameTheory 的课件. 定义 我们对于一些二维 \(\mathrm{Nim}\) 游戏(好像更高 ...