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

IQueryable<StudentDetail> sd=db.StudentDetails; foreach (var item in sd)
{
Console.WriteLine(item.Studnet.s_Name);
}
解决的办法,和平时我们普通使用数据库是一样的,使用内连接inner jion来查询。在EF中要生成这样的语句使用;
db.Students.Include("c_ID"); -->语法是:数据上下文对象的实例.表名.Include("外键名称");
通过Include()方法,可以告诉EF,链接查询哪个外键属性。当有多个外键属性的时候,要链接查询,可以使用多个Include()方法。即db.Students.Include("c_ID").Include("xxx").Include("sss");.....
*使用EF查询方法并结合Select方法,在Select中使用到了实体的外键属性,那么EF会自动生成inner join 语句查询数据库: 如代码:
db.StudentDetails.Where(s => s.u_SID == 1).Select(s => new { aId = s.u_SID, aName = s.Studnet.s_Name }).ToList();
IQueryable<StudentDetail> sd = db.StudentDetails.Include("Studnet"); //这段代码执行完之后,并不会马上生成SQL语句执行查询,即延迟加载,(正是有IQueryable接口,才支持延迟加载),查询的返回结果是IQueryable类型,所以,使用这个类型来接收,当然也可以使用它的子类DbQuery<Studentdetail>类型来接收的。延迟加载正是通过DbQuery这个类来实现的。
//DbQuery<StudentDetail> sd = db.StudentDetails.Include("Studnet");
foreach (var item in sd)
{
//当访问StudentDetail对象里的外键实体时,EF会查询StudentDetail里对应的学生表(Student),查询之后,将数据装入,这个外键实体
Console.WriteLine(item.Studnet.s_Name); //这句执行的时候,才会执行生成SQL(包含Inner join的SQL),执行查询。只生成一次,后面循环再查询的时候,不会再生成。这样就解决了外建延迟加载的缺陷。 }
这样一来,在程序运行的时候,会自动生成inner join 的SQL语句。而我们使用多个外键属性的时候,就不会再去查外键表了。
Entity FrameWork 延迟加载本质(二)的更多相关文章
- Entity Framework 程序设计入门二 对数据进行CRUD操作和查询
前一篇文章介绍了应用LLBL Gen生成Entity Framework所需要的类型定义,用一行代码完成数据资料的读取, <LLBL Gen + Entity Framework 程序设计入门& ...
- Entity Framework学习笔记(二)----CRUD(1)
请注明转载地址:http://www.cnblogs.com/arhat 这篇文章老魏和大家分享一下Entity Framework的CRUD操作,在这之前呢,老魏先说一下老魏对EF的一个整体的认识, ...
- Entity Framework笔记(二)
前几日学习了在VS2010Console项目中使用Entity Framework,并且使用Code First模式.通过编写Model类,来生成数据库对应的表.并且,往表中写入数据以及获取表中的所有 ...
- Entity FrameWork 延迟加载的本质(一)
1.集合的标准查询运算符方法,是来自于System.Linq.Enumerable里给IEnumerable接口添加的扩展方法 2.EF上下文里的DBSet<T>里的标准查询运算符方法,来 ...
- Entity Framework框架 (二)
一.前面一篇EF的介绍主要是通过linq语句,本篇主要是介绍一下不通过linq语句如何去操作EF执行查询sql语句与执行存储过程. 1. 其中的Acccout是输出参数对应的类.比如输出参数有三个值 ...
- Code First :使用Entity. Framework编程(5) ----转发 收藏
第五章 对数据库映射使用默认规则与配置 到目前为止我们已经领略了Code First的默认规则与配置对属性.类间关系的影响.在这两个领域内,Code First不仅影响模型也影响数据库.在这一章,你将 ...
- 【译著】Code First :使用Entity. Framework编程(5)
第五章 对数据库映射使用默认规则与配置 到目前为止我们已经领略了Code First的默认规则与配置对属性.类间关系的影响.在这两个领域内,Code First不仅影响模型也影响数据库.在这一章,你将 ...
- LINQ to SQL和Entity Framework
LINQ to SQL和Entity Framework都是一种包含LINQ功能的对象关系映射技术. 那么为什么会有LINQ这个东西的出现呢. 简单来说LINQ是为了满足不知道怎么操作数据库的程序员开 ...
- Entity Framework 项目使用心得
在博客园很久了,一直只看不说,这是发布本人的第一个博客. 总结一下在项目中,EntityFramework使用的一下经验拿来和大家分享,希望对大家有用~ 1. 在Entity Fram ...
随机推荐
- 用 Mahout 和 Elasticsearch 实现推荐系统
原文地址 本文内容 软件 步骤 控制相关性 总结 参考资料 本文介绍如何用带 Apache Mahout 的 MapR Sandbox for Hadoop 和 Elasticsearch 搭建推荐引 ...
- 美行Thinkpad八通道快捷入口
美行Thinkpad八通道快捷入口 链接: http://shop.lenovo.com/perksoffer/us/en/laptops/thinkpad/?__followRobots=true打 ...
- TextView使用SpannableString设置复合文本(转)
TextView通常用来显示普通文本,但是有时候需要对其中某些文本进行样式.事件方面的设置.Android系统通过SpannableString类来对指定文本进行相关处理,具体有以下功能: 1.Bac ...
- Flipping elements with WPF
http://yichuanshen.de/blog/2010/11/13/flipping-elements-with-wpf/ Have you already seen ForgottenTim ...
- 【国内独家首发】iPhone4 iOS7不完美越狱教程新鲜出炉
准备工作: 1.Mac (OSX 10.8以上系统): 2.iPhone 4 (iPhone3, 1 iOS 7.0.2): 3.iPhone 4数据线一根: 4.下载越狱工具包:ios7_jb_ki ...
- 使用Xcode6.1.1打包出现Your account already has a valid iOS Distribution certificate问题
1.问题描述: 使用客户证书在Xcode6.1.1上进行打包测试,出现如下问题,查看网上也很多类似错误且解决办法各异. 2.我的解决办法: 让客户将开发.发布证书重新revoke掉之后重新创新并给到p ...
- 关于php的mysqlnd驱动
1.什么是mysqlnd驱动? PHP手册上的描述: MySQL Native Driver is a replacement for the MySQL Client Library (libmys ...
- 用 Wireshark 图解:TCP 三次握手
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “snow warn throughout the winter” 一.什么是 Wireshar ...
- 关于app.config不能即时保存读取的解决方案
public void saveValue(string Name, string Value) { ConfigurationManager.AppSettings.Set(Name, Value) ...
- 如何生成ipa文件
xcode--Product--Archive 弹出Organizer-Archives选择Distribute---Save for EnterPrise or Ad_Hoc Deployment- ...