第二篇 Entity Framework Plus 之 Query Future

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

 今天主要怎样减少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跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329682.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python长整数相乘_python写的大整数相乘的方法

输入72106547548473106236 982161082972751393 两个大整数输出结果70820244829634538040848656466105986748解题思路首先根据 大整数相乘的原理的基础上&#xff0c;把大整数进行优化拆分&#xff0c;拆分的长度&#xff0c;要考虑语言中整形的长度。这里用的python&#xff0c…

Java Web应用的代码分层最佳实践

转载自 Java Web应用的代码分层最佳实践代码分层&#xff0c;对于任何一个Java Web开发来说应该都不陌生。一个好的层次划分不仅可以能使代码结构更加清楚&#xff0c;还可以使项目分工更加明确&#xff0c;可读性大大提升&#xff0c;更加有利于后期的维护和升级。从另外一个角…

中断屏蔽技术

【README】 本文总结自bilibili《计算机组成原理&#xff08;哈工大刘宏伟&#xff09;》的视频讲解&#xff0c;非常棒&#xff0c;墙裂推荐&#xff1b; 【1】中断屏蔽 1&#xff0c;中断屏蔽的意思是&#xff0c;在中断1的服务程序执行过程中&#xff0c;不允许被其他中断…

.NET FM的未来计划

2016年3月21日&#xff0c;我们启动了.NET FM这档独立播客来服务中文.NET和微软技术社区。如同早先感谢信所言&#xff0c;能够得到社区的肯定和全力支持&#xff0c;二位主播是受宠若惊。关于未来的计划&#xff0c;下面简单和大家分享一下。 首先&#xff0c;关于节目播出频率…

Java开发必须掌握的日志分析命令

转载自 Java开发必须掌握的日志分析命令 对于大型网站来说&#xff0c;很多网站在可用性方面提出4个9或者5个9的要求&#xff0c;如果是4个9&#xff0c;那么网站全年的不可用时间不能超过52.6分钟&#xff0c;如果是5个9&#xff0c;全年不可用时间不能超过5.2分钟。这其实是很…

指令寻址方式与数据寻址方式

【README】 1.本文总结自bilibili《计算机组成原理&#xff08;哈工大刘宏伟&#xff09;》的视频讲解&#xff0c;非常棒&#xff0c;墙裂推荐&#xff1b; 2. cpu访存寄存器耗费 10ns&#xff0c;访问缓存&#xff08;高速缓冲寄存器&#xff09;耗费20ns&#xff0c;访问主…

python oj 输入_Python写OJ题时输入问题

# encoding: utf-8Created on Nov 6th, 2014author: SpeedcellPython的输入是野生字符串&#xff0c;所以要自己转类型strip去掉左右两端的空白符&#xff0c;返回strslipt把字符串按空白符拆开&#xff0c;返回[str]map把list里面的值映射到指定类型&#xff0c;返回[type]EOF…

本地缓存的原理及技术选型参考

转载自 本地缓存的原理及技术选型参考互联网架构设计的五大要素&#xff1a;高性能、高可用、可伸缩性、可扩展性、安全。如何做到高性能、高可用&#xff0c;缓存是一大助力。我们知道&#xff0c;绝大部分的时候&#xff0c;读数据写数据符合二八定律。并且读数据中&#xff…

程序员欢呼:微软Bing开始支持搜索源码、可直接运行

日常生活中&#xff0c;程序员们经常会遇见这样那样的问题&#xff0c;比如忘记了代码该怎么写&#xff0c;又或者需要实现一些特殊的算法和功能。这时候&#xff0c;你就可以去找微软 Bing 帮忙啦&#xff01; 微软最近联合 HackerRank 一起研发了一项新功能&#xff1a;源代码…

rabbitmq创建缓存连接工厂

转自&#xff1a; 【RabbitMQ-3】连接池的配置_小胖学编程的博客-CSDN博客文章目录1. rabbitmq的connection连接池1.1 问题提出1.1.1 Connection对象管理以及性能1.1.2 Channel对象管理以及性能1.2 Spring AMQP线程池配置1.2.1 ConnectionFactory连接工厂1.2.2 消费发送和接收…

python简短语法_写出优雅简洁的 python 语法(二)函数传参

Python中函数传递参数的形式包含多种&#xff0c;可根据情况而定使用哪种方式。基本所有语言都有简介明了的语法去替代繁琐的代码&#xff0c;优雅的写法不仅能提升代码美观&#xff0c;更能提高提高开发效率&#xff0c;让代码更加易读。位置传递&#xff0c;默认参数位置传参…

你真的了解Java中的三目运算符吗

转载自 你真的了解Java中的三目运算符吗三目运算符是我们经常在代码中使用的&#xff0c;a (bnull?0:1);这样一行代码可以代替一个if-else,可以使代码变得清爽易读。但是&#xff0c;三目运算符也是有一定的语言规范的。在运用不恰当的时候会导致意想不到的问题。本文就介绍一…

关于.NET下开源及商业图像处理(PSD)组件

1 前言 这篇博客的背景是&#xff1a;为了完成吉日嘎拉的“PSD文件损坏检测和图层检测”任务&#xff0c;查找了目前.NET各种开源的及商业的图像处理资料&#xff0c;在完成任务之后&#xff0c;进行总结。此次任务主要是用C#操作PSD(PhotoShop)文件&#xff0c;中文资料很少&a…

SpringBoot连接多RabbitMQ源

转自&#xff1a; SpringBoot连接多RabbitMQ源 - 掘金在实际开发中&#xff0c;很多场景需要异步处理&#xff0c;这时就需要用到RabbitMQ&#xff0c;而且随着场景的增多程序可能需要连接多个RabbitMQ。SpringBoot本身提供了默认的配置可以快速配置连接RabbitMQ&#xff0c;但…

满足其中一个条件则可_农村分户好处多,但并非人人都可分户!满足这4个条件才可以申请...

分户&#xff0c;一般指子女成年或者成家后从父母户口里面独立出去&#xff0c;自立一户&#xff1b;也可以是指夫妻离婚后一方将户口独立出去(离婚也可以不分户&#xff0c;变更婚姻状态就行)。简单的说分户是指原本在一个户口本上的人口&#xff0c;现在分出去自成一个户口本…

Synchronized的实现原理(一)

转载自 Synchronized的实现原理&#xff08;一&#xff09;synchronized&#xff0c;是Java中用于解决并发情况下数据同步访问的一个很重要的关键字。当我们想要保证一个共享资源在同一时间只会被一个线程访问到时&#xff0c;我们可以在代码中使用synchronized关键字对类或者对…

FOSS历史回顾:三代开源人的故事

现在是2016年&#xff0c;你环顾一下四周&#xff0c;开源早已无处不在了。开源无论是规范、形式、以及面貌都和最初的大相径庭&#xff0c;然而事实上&#xff0c;这也预示着新一代的开源程序员们的崛起。下面我们尝试解释下。 &#xff08;以下这一段落为作者自谦&#xff09…

Spring中@Autowired、@Qualifier、@Resource的区别

转自&#xff1a; Spring中Autowired、Qualifier、Resource的区别_老周聊架构的博客-CSDN博客_qualifier和resource区别1、AutowiredAutowired 可以单独使用。如果单独使用&#xff0c;它将按类型装配。因此&#xff0c;如果在容器中声明了多个相同类型的bean&#xff0c;则会…

map分组后取前10个_海关数据 | 图解前10个月外贸

*内容转载自微信公众号&#xff1a;海关发布RECOMMEND【 推荐阅读 】海关数据 | 图解前三季度我国外贸海关数据 | 图解8月外贸海关数据 | 一图看懂前7个月外贸海关数据 | 图解上半年度外贸增3.9%声明本微信订阅号不以商业营利为目的&#xff0c;不排除部分文字内容或图片转载自…

回顾build 2016:你好,这是微软迄今最好的Windows开发平台

按&#xff1a;本文作者陈计节&#xff0c;ThoughtWorks 高级咨询师。多年的跨平台 .NET 开发者&#xff0c;全栈工程师&#xff0c;技术布道师。擅长互联网应用程序的设计、开发和运维等工作。 在最近的开发者大会&#xff08;Build 2016&#xff09;上&#xff0c;微软面向开…