1.集合的标准查询运算符方法,是来自于System.Linq.Enumerable里给IEnumerable接口添加的扩展方法

2.EF上下文里的DBSet<T>里的标准查询运算符方法,来自于System.Linq.Queryable里的IQueryable接口添加的扩展方法

3.延迟加载的,本质原因之一:当前可能通过多个标准查询运算符方法,来组合查询条件,那么每个方法都只是添加一个查询条件而已,无法确定本次查询条件,是否已经添加结束,所以,没有办法在每个标准查询运算符方法的时候,确定SQL语句是什么,只能返回一个包含了所有添加条件的DbQuery对象;当使用这个DbQuery对象的时候,才根据所有条件生成SQL语句,查询数据库。

下面是代码,变相的即时查询:

  #region 查询+void Query()
/// <summary>
/// 查询
/// </summary>
static void Query()
{
//查询名字为刘德华的数据
//变相的即时查询(通过SQl Server Profiler工具侦听可以知道,执行完这句,立马就查询数据库了,生成了SQl语句,这就是即时查询)
List<Studnet> stu = db.Studnets.Where(s => s.s_Name == "刘德华").ToList(); //使用集合的foreach方法,遍历查询到的数据
//这里会查询到的结果是对象,就是类似于,system.什么什么。这是因为ToString()方法是Object对象的方法,这里我们需要来对Student对象,重写一个Tostring方法。
//因为T4模板,会在每次保存的时候,自动覆盖之前的修改,重新生成。所以需要为student写一个部分类,在部分类里面重写Tostring()方法
stu.ForEach(s => Console.WriteLine(s.ToString()));
}
#endregion

Query

下面是延迟查询:

真正做延迟加载的是,DbQuery类,这个类实现了IQueryable接口,看图:

那什么是延迟加载呢?

请看:

   //延迟查询
DbQuery<Studnet> i = db.Studnets.Where(s => s.s_Name == "刘德华") as DbQuery<Studnet>; //这句话执行完之后,并不会立即生成SQL语句来查询数据库, Studnet st= i.FirstOrDefault(); //只有在使用的时候,才会去查数据库,生成SQL语句 (可以使用SQL Server自带的工具,SQl Server Profiler侦听)

Entity FrameWork 延迟加载的本质(一)的更多相关文章

  1. Entity FrameWork 延迟加载本质(二)

    1.对于外键实体而言,EF会在用到这个外键属性的时候,才会去查对应的表.这就是按需加载了... 2.按需加载的缺点:每次调用外键实体的时候,都会去查询数据库(EF有小优化:相同的外键实体只查一次) I ...

  2. LINQ TO SQL和Entity Framework 的关系 你了解多少?

    1. LINQ  TO SQL  和EF 特点:  LINQ TO SQL和Entity Framework都是一种包含LINQ功能的ORM 也就是所谓的关系对象的映射.其中包括的有DBFrist   ...

  3. 《Entity Framework 6 Recipes》中文翻译系列 (22) -----第五章 加载实体和导航属性之延迟加载

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第五章 加载实体和导航属性 实体框架提供了非常棒的建模环境,它允许开发人员可视化地使 ...

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

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

  5. 《Entity Framework 6 Recipes》翻译系列 (1) -----第一章 开始使用实体框架之历史和框架简述

    微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF ...

  6. 《Entity Framework 6 Recipes》中文翻译系列 (28) ------ 第五章 加载实体和导航属性之测试实体是否加载与显式加载关联实体

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-11  测试实体引用或实体集合是否加载 问题 你想测试关联实体或实体集合是否已经 ...

  7. 3、ASP.NET MVC入门到精通——Entity Framework增删改查

    这里我接上讲Entity Framework入门.从网上下载Northwind数据库,新建一个控制台程序,然后重新添加一个ado.net实体数据模型. EF中操作数据库的"网关"( ...

  8. MVC – 3.EF(Entity Framework)

    1.实体框架(EF)简介 与ADO.NET的关系 全称是ADO.NET Entity Framework,是微软开发的基于ADO.NET的ORM(Object/Relational Mapping)框 ...

  9. Entity FrameWork 中使用Expression<Func<T,true>>访问数据库性能优化

    问题的本质是:扩展的Where方法有四个参数重载.传进去Func<T,true>那么返回值是IEnumable的接口类型的集合,如果是Expression<Func<T,tru ...

随机推荐

  1. js去掉html标签和去掉字符串文本的所有的空格

    去掉html标签的js <script> function delHtmlTag(str){  return str.replace(/<[^>]+>/g,"& ...

  2. 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包。

    最近在升级 Visual Studio 2015 Update 3 的过程中,等了很长时间都没一点进展,于是就强行终止了升级程序,但VS也因此出了问题. 后来经过修复,不行,卸载再重装,仍然提示这个错 ...

  3. 关于BigDecimal的使用

    为什么使用BigDecimal 使用BigDecimal首先要注意到float,double是无法支持商业计算的.只能支持工程计算.即误差允许的计算.通常float占用4个字节,32位.double占 ...

  4. 用 Jenkins 打包 iOS

    需要安装插件: 1.GIT plugin 2.Xcode integration   1.新建 Job 填入“Item名称”,选择“构建一个自由风格的软件项目”,OK:   2.填入“项目名称”   ...

  5. 开启MSDTC

    DOS方式以运行中输入cmd 然后输入下面命令: 停止MSDTC: net stop msdtc 开启MSDTC: net start msdtc 卸载MSDTC: msdtc -uninstall ...

  6. [转]Linux下的lds链接脚本详解

    转载自:http://linux.chinaunix.net/techdoc/beginner/2009/08/12/1129972.shtml     一. 概论 每一个链接过程都由链接脚本(lin ...

  7. 算法 - 求两个自然数的最小公倍数(C++)

    //************************************************************************************************** ...

  8. Java开发者值得关注的7款新工具

    云计算.大数据地快速发展催生了不少热门的应用及工具.作为老牌语言Java,其生态圈也出来了一些有关云服务.监控.文档分享方面的工具.本文总结了7款较新的Java工具,大家不妨看下. 1. JClari ...

  9. xcode 插件之KSImageNamed-Xcode

    https://github.com/ksuther/KSImageNamed-Xcode 好用,各位记得安装啊

  10. Asus ubuntu Fn恢复

    sudo sed 's/GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"/GRUB_CMDLINE_LINUX_DEFAULT="qui ...