从性能的角度出发,能够减少 增,删,改,查,跟数据库打交道次数,肯定是对性能会有所提升的(这里单纯是数据库部分)。

今天主要怎样减少Entity Framework查询跟数据库打交道的次数,来提高查询性能。

举一个大家最常用功能 “分页” 功能。先贴一段代码。

这类型的代码,大家估计都看到过,也自己写过,简单分析一下。

orders.Count() 返回int 类型,肯定要查询出数据库才知道订单总笔数。

pagerOrders.ToList() 返回  IEnumerable<T> 类型,这个不用解释Entity Framework  IEnumerable 和 IQueryable 区别是

IEnumerable 会执行SQL,IQueryable 而不会。所以这句也会去数据库查询一次。

那整个分页功能用Entity Framework 就是最少要两次数据库查询,刚刚上面说了,一个基本的提高性能方法就要减少与数据库打交道次数。

从“分页”功能来说,要是变成只有一次与数据库打交道,那就是对性能有大提升。Entity Framework 自身是没有提供这样的方法。

Entity Framework Plus 库 Query Future 扩展,是一个对Entity Framework 功能的延伸和扩展,能够做到减少数据库打交道次数。使查询性能更高。

 一 . Entity Framework Plus 库 Query Future 安装

1.  解决方案 还是我上一篇 第一篇 Entity Framework Plus 之 Audit 用的解决方案“EntityFrameworkPlusSolution”,新增 “EntityFrameworkPlus.QueryFuture.Demo” 控制台项目,作为Entity Framework Plus 库 Query Future 扩展 应用和展示功能项目。项目结构截图如下

项目关系图 (代码图)

2. 为了方便Demo,新增商品业务 相关的 Model,Mapping,以及改动DbContext 如下代码

GoodsModel


GoodsMap


EntityFrameworkPlusDbContext

3. 右键 “EntityFrameworkPlus.QueryFuture.Demo” 项目,选择“管理NuGet程序包”,关联部分  右上角搜索“Z.EntityFramework.Plus” ,然后选择 “EntityFramework Plus (EF6) | Query Deferred”&“EntityFramework Plus (EF6) | Query Futurn” 两项安装

二. Entity Framework Plus  库 Query Future 扩展功能实作

1. 在 “EntityFrameworkPlus.QueryFuture.Demo” 项目 Program 新增3个静态方法,分别是

FindOrdersWithGoodsies()  查询订单信息和商品信息

FindPagerOrders(int pageSize, int pageIndex, out int totalCount)  订单分页查询

FindGoodsMaxWithMinUnitPrice() 查询单价最大和最小的商品

详细代码如下

2.  3个方法的SQL追踪和截图

FindOrdersWithGoodsies

FindPagerOrders(int pageSize, int pageIndex, out int totalCount)

FindGoodsMaxWithMinUnitPrice()

至此比较常用到场景,就已经实作完成,大家看到截图和SQL说明都是一次执行,其他大家可以根据 EntityFramework Plus 源代码和文档(不过是英文,但是基本能够看懂),进行更加深入的了解,了解实现原理,我这里还是抛砖引玉一下。

这篇博文的源代码:https://github.com/haibozhou1011/EntityFramework-PlusSample

相关文章

  • 第一篇 Entity Framework Plus 之 Audit

  • Entity Framework教程(第二版)

原文地址:http://www.cnblogs.com/davidzhou/p/5376598.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

第二篇 Entity Framework Plus 之 Query Future相关推荐

  1. 第三篇 Entity Framework Plus 之 Query Cache

    离上一篇博客,快一周,工作太忙,只能利用休息日来写一些跟大家分享,Entity Framework Plus 组件系列文章,之前已经写过两篇 第一篇 Entity Framework Plus 之 A ...

  2. 第四篇 Entity Framework Plus 之 Batch Operations

    用 Entity Framework  进行 增,删,改.都是基于Model进行的,且Model都是有状态追踪的.这样Entity Framework才能正常增,删,改. 有时候,要根据某个字段,批量 ...

  3. 第一篇 Entity Framework Plus 之 Audit

    一般系统会有登陆日志,操作日志,异常日志,已经满足大部分的需求了.但是有时候,还是需要Audit 审计日志,审计日志,主要针对数据增,改,删操作数据变化的记录,主要是对数据变化的一个追踪过程.其中主要 ...

  4. 使用 ASP.NET Core, Entity Framework Core 和 ABP 创建N层Web应用 第二篇

    介绍 这是"使用 ASP.NET Core ,Entity Framework Core 和 ASP.NET Boilerplate 创建N层 Web 应用"系列文章的第二篇.以下 ...

  5. 第一篇:Entity Framework 简介

    先从ORM说起吧,很多年前,由于.NET的开源组件不像现在这样发达,更别说一个开源的ORM框架,出于项目需要,以及当时OOP兴起(总不至于,在项目里面全是SQL语句),就自己开始写ORM框架.要开发O ...

  6. Entity Framework学习中级篇

    1-EF支持复杂类型的实现 本节,将介绍如何手动构造复杂类型(ComplexType)以及复杂类型的简单操作. 通常,复杂类型是指那些由几个简单的类型组合而成的类型.比如:一张Customer表,其中 ...

  7. Entity Framework 学习中级篇—EF支持复杂类型的实现

    http://www.cnblogs.com/xray2005/archive/2009/06/01/1493661.html 本节,将介绍如何手动构造复杂类型(ComplexType)以及复杂类型的 ...

  8. Entity Framework快速入门笔记第四篇—ModelFirst

    前言:在上一篇博客中我们做了一个小的Demo,使用EF实现了对数据库的增删改查的操作,所谓学习,我们就要学会举一反三,所以好好学习一下上一篇的内容还是方便以后的扩展学习,这篇博客我们主要来研究一下Mo ...

  9. oracle精简版_使用Entity Framework Core访问数据库(Oracle篇)

    前言 哇..看看时间 真的很久很久没写博客了 将近一年了. 最近一直在忙各种家中事务和公司的新框架  终于抽出时间来更新一波了. 本篇主要讲一下关于Entity Framework Core访问ora ...

最新文章

  1. 编程作业—C++初探 简单的学生信息处理程序实现
  2. JavaScript 学习笔记3
  3. mysql_connect 废弃_解决Deprecated: mysql_connect():
  4. Mellanox 8亿美元收购EZchip
  5. java如何通过grpc连接etcd_grpc通过 etcd 实现服务发现与注册-源码分析
  6. pythonset是什么类型的游戏_Python集合(set)类型的操作
  7. HDU 1244 DP
  8. 使用Javascript正则表达式来格式化XML内容
  9. 时间管理领域的三八原则
  10. Web 3.0项目Aluna.Social宣布将ALN代币将分发给2600多个早期采用者
  11. 基于MATLAB产生式系统(植物识别系统)
  12. VirtualBox 安装增强功能错误
  13. 华为x6000刀箱和机架服务器RAID配置和超线程关闭
  14. 开机动画适配方案_修改开机动画教程
  15. linux命令里的xz是干嘛的,Ubuntu中的xz命令使用
  16. kasp技术原理_KASP-基于已知SNP的高通量基因分型
  17. QQ来信息突然没声音了
  18. ROS机器人操作系统学习笔记(三)ROS通信架构
  19. 专业表操作鉴权(增、删、改、id查、全查、名字模糊查)
  20. The Biggest Water Problem

热门文章

  1. GridView实现数据编辑和删除(一)
  2. 对象androidandroid 开发中 如何取得ListView 的 每条Item 的对象
  3. JavaME程序 Run Anywhere-- 利用反射机制来动态加载声
  4. 缕一缕c#可null类型
  5. .Net Core with 微服务 - 分布式事务 - 2PC、3PC
  6. 在 Azure App Service 上运行 .NET 6 预览版
  7. 如何在 C# 8 中使用 模式匹配
  8. 理解 redis 中的 集合对象类型
  9. 别“躺”着了,赶紧把「复盘」做起来
  10. 软件如何优雅地向前兼容?