显式加载

讲解之前,先来看一下我们的数据库结构:班级表 学生表

加载从表集合类型

//显示加载
Console.WriteLine("=========查询集合===========");
using (var db = new Entities())
{
var query = from v in db.Classes
where v.ClassName == "机电10501"
select v;
var cls = query.Single();
db.Entry(cls).Collection(v => v.Student).Load();//加载集合使用Collection方法
Console.WriteLine("==========="+cls.ClassName);
foreach (var stu in cls.Student)
{
Console.WriteLine(stu.StudentName);
} //IsLoaded方法判断数据是否已经加载
Console.WriteLine(db.Entry(cls).Collection(v => v.Student).IsLoaded);
}

追踪SQL语句

说明:此处执行了2条SQL,先查询班级 再查询该班级学生

加载集合使用Collection方法,Entry的参数为单个实体

执行结果:

加载关联表单个实体

//显示加载
Console.WriteLine("=========查询单个实体===========");
using (var db = new Entities())
{
var student = db.Student.First();
db.Entry(student).Reference(v => v.Classes).Load();//加载单个实体使用Reference方法
Console.WriteLine(student.StudentName);
Console.WriteLine(student.Classes.ClassName);
}

追踪SQL语句

说明:此处执行2条SQL,先查询第一个学生 top (1),再查询该学生班级。

说明:显式加载不需要标记为virtual

按需加载 只查询部分字段

//按需查询
using (var db = new Entities())
{
var query = from v in db.Student
select new
{
id=v.StudentID,
name=v.StudentName
};
foreach (var st in query)
{
ObjectDumper.Write(st);
}
}

追踪SQL语句:

说明:生成的SQL语句只查询了 StudentID 和 StudentName 两个字段。

【EF学习笔记08】----------加载关联表的数据 显式加载的更多相关文章

  1. Servlet学习笔记(二):表单数据

    很多情况下,需要传递一些信息,从浏览器到 Web 服务器,最终到后台程序.浏览器使用两种方法可将这些信息传递到 Web 服务器,分别为 GET 方法和 POST 方法. 1.GET 方法:GET 方法 ...

  2. 【EF学习笔记07】----------加载关联表的数据 贪婪加载

    讲解之前,先来看一下我们的数据库结构:班级表 学生表 贪婪加载 //贪婪加载 using (var db = new Entities()) { var classes = db.Classes.Wh ...

  3. 【EF学习笔记06】----------加载关联表的数据 延迟加载

    讲解之前,先来看一下我们的数据库结构:班级表 学生表 延迟加载 //延迟加载 using (var db = new Entities()) { //查询班级 var classes = (from ...

  4. 【EF学习笔记05】----------操作内存中的数据

    SingleOrDefault实验 //SingleOrDefault实验 using (var db = new Entities()) { var classes = new Classes() ...

  5. Ext.Net学习笔记08:Ext.Net中使用数据

    之前的七篇文章都是介绍Ext.Net较为基础的东西,今天的这一篇将介绍数据的一些用法,包括XTemplate绑定数据.Store(Modal.Proxy).ComboBox的用法等. XTemplat ...

  6. 【Arduino学习笔记08】使用串口监视器显示数据

    代码及相关说明: 1 // 示例:读取模拟输入并显示在串口监视器中 2 3 const int ANALOG_IN = 0; 4 int val = 0; 5 6 void setup(){ 7 Se ...

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

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

  8. EF学习笔记(八):更新关联数据

    学习笔记主目录链接:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇链接:EF学习笔记(七):读取关联数据 本篇原文链接:Updating Related Data 本篇主要考 ...

  9. 【EF学习笔记10】----------主从表级联操作

    主从表 级联新增 Console.WriteLine("=========主从表 级联新增=========="); using (var db = new Entities()) ...

随机推荐

  1. zookeeper初识之原理

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等. Zookeeper是hadoop的一个子项目 ...

  2. C++模板中的函数对象

    在C++模板类map中一个参数为Compare类型,该类型为一个比较函数,其完整定义如下: template< class Key, class T, class Compare = std:: ...

  3. maven 基本常识以及命令

    Maven库: http://repo2.maven.org/maven2/ Maven依赖查询: http://mvnrepository.com/ Maven常用命令: 1. 创建Maven的普通 ...

  4. A Brief Introduction to Markovs Chains

    本文译自A Brief Introduction to Markovs Chains 译者按: 前面一篇文章讲的是蒙特卡洛积分,也就是通过生成符合特定分布的随机变量来近似计算积分值,例如: \(E = ...

  5. Neo4j Cypher运行示例

    示例来源: Neo4j in Action. 0 准备数据 0.1 node (user1 { name: 'John Johnson', type: 'User', email: 'jsmith@e ...

  6. 最短路径问题——dijkstra算法

    仅谈谈个人对dijkstra的理解,dijkstra算法是基于邻接表实现的,用于处理单源最短路径问题(顺便再提一下,处理单源最短路径问题的还有bellman算法).开辟一个结构体,其变量为边的终点和边 ...

  7. 《Android深度探索》(卷1)HAL与驱动开发读后感

    第1章:安卓系统移植与驱动开发概述 这一章主要概括的介绍了安卓驱动开发和系统移植的主要内容,对安卓与Linux驱动做了一个总体的介绍.通过对第一章的学习,使我对Linux驱动开发有了一个感性的认识.在 ...

  8. hdu4737 A Bit Fun ——O(n)做法、错误的做法 + 正确做法

    囧== 下面的做法是错误的.下午在路上突然明白了== 哎,到现在还是只知道暴力的做法,囧爆了:http://www.cnblogs.com/liuxueyang/p/3322197.html 类似于前 ...

  9. php部分---一个分页类、用法

    1.分页类 <?php /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 privat ...

  10. linux之"server" directive is not allowed here in

    配置完rewrite之后重启nginx发现如下错误 "server" directive is not allowed here in* 原因是因为 外部配置的simple.con ...