EF学习和使用(六)显式加载、按需加载
来源:互联网 发布:ios mac地址伪装 编辑:程序博客网 时间:2024/06/14 18:29
这篇博客接着说EF加载数据的方式,今天介绍剩下的两种:显式加载和按需加载。
显式加载(Explicit Loading)
显式加载和延迟加载非常类似,不同的是显式加载要手动关闭EF的延迟加载属性,通过代码ctx.Configuration.LazyLoadingEnabled = false;来完成。
using (var dbcontext= new ModelFirstDemoEntities()){ dbcontext.Configuration.LazyLoadingEnabled = false; #region 显式加载:查询部分列数据,前提关闭 懒加载 //查询表中部分列的数据 var items = from c in dbcontext.Customer select c; foreach (var item in items) { //条件判断,只加载满足条件的数据,减少访问数据库的次数 if (item.Id < 5) { dbcontext.Entry(item).Collection(c => c.Order).Load(); Console.WriteLine(item.CusName); } foreach (var order in item.Order) { Console.WriteLine("Course name : {0}", order.OrderContent); } } #endregion}
通过在SQL Server Profiler中的跟踪记录可以看到一共执行了4次对Order表的查询。显式加载的意义就在于我们可以通过添加判断条件,对数据加载方式进行控制,从而有效地减少程序与数据库交互的次数。大多数情况下,我们从数据库获取到的数据并不都是需要的,如果每次只有很少一部分数据有用,那么我们为什么不过滤掉那些无用的数据从而尽量较少数据交互的次数呢?
按需加载
其实EF并不存在按需加载的概念,但是这种方式很值得说一说,在加载数据的时候并不是需要所有的属性值,可能只需要一个Id,Name值。所以我们可以对要查询的实体进行一下筛选,只加载自己需要的某些列,避免加载大量的垃圾数据。在这里按需加载的概念只是加载需要的列。可能会与前端开发中 的概念“按需加载”有所冲突。
#region 按需加载:查询部分列数据 //查询表中部分列的数据 var items = from c in dbcontext.Customer where c.Id < 10 select new { Id = c.Id, CName = c.CusName, OrderCount = c.Order.Count() }; foreach (var item in items) { Console.WriteLine(item.CName); } #endregion
现在EF所谓的四种加载数据的方式都已经介绍完了, 相信大家对这几种方式都有了一定的认知,知道了在什么情况下使用何种方式较好。就像前面所说,选择什么样的数据加载方式需要因时而异,每一种数据加载方式都有它存在的意义,但目的只有一个,那就是以最小的代价获取到需要的数据。
1 0
- EF学习和使用(六)显式加载、按需加载
- EF学习和使用(七)EF性能优化篇
- EF使用延迟加载的本质原因
- EF学习和使用(二)ModelFirst
- EF延迟加载
- EF 加载相关实体
- EF之关联加载
- EF 数据延迟加载
- EF加载问题
- tensorflow学习笔记六:保存和加载训练模型
- 【EF映射】EF原理及延迟加载
- 【EF】EF映射中的延迟加载
- EF学习和使用(四)解析EF的核心-EDM
- spring源码学习(六)Bean的加载(中)
- MyBatis学习(六)---高级应用(延迟加载、缓存)
- JVM学习笔记(六):类加载的时机
- Hibernate的学习之路六(加载配置)
- EF性能之关联加载
- oracle创建数据库 win7_64位_oracle11g:Enterprise Manager配置失败-监听程序未启动或数据库服务未注册到该监听程序解决办法
- UITabBarController、UITabBar
- kettle变量及常用备注
- TabHost笔记
- 几道简单的线段树入门题 POJ3264&&POJ3468&&POJ2777
- EF学习和使用(六)显式加载、按需加载
- java面试题二十九 多线程数据共享问题
- Ubuntu 中文输入法安装 ibus
- 修改mysql密码
- 装饰我的Linux ---Ubuntu Kylin 15.04
- Android 应用桌面快捷方式 创建 删除
- 微软2014实习生及秋令营技术类职位在线测试-K-th string
- JAVA Final
- POJ - 3186 Treats for the Cows(DP)