第二篇 Entity Framework Plus 之 Query Future
從性能的角度出發(fā),能夠減少 增,刪,改,查,跟數(shù)據(jù)庫打交道次數(shù),肯定是對(duì)性能會(huì)有所提升的(這里單純是數(shù)據(jù)庫部分)。
?今天主要怎樣減少Entity Framework查詢跟數(shù)據(jù)庫打交道的次數(shù),來提高查詢性能。
?舉一個(gè)大家最常用功能 “分頁” 功能。先貼一段代碼。
這類型的代碼,大家估計(jì)都看到過,也自己寫過,簡(jiǎn)單分析一下。
?orders.Count() 返回int 類型,肯定要查詢出數(shù)據(jù)庫才知道訂單總筆數(shù)。
?pagerOrders.ToList() 返回??IEnumerable<T> 類型,這個(gè)不用解釋Entity Framework ?IEnumerable 和 IQueryable?區(qū)別是
?IEnumerable 會(huì)執(zhí)行SQL,IQueryable 而不會(huì)。所以這句也會(huì)去數(shù)據(jù)庫查詢一次。
那整個(gè)分頁功能用Entity Framework 就是最少要兩次數(shù)據(jù)庫查詢,剛剛上面說了,一個(gè)基本的提高性能方法就要減少與數(shù)據(jù)庫打交道次數(shù)。
從“分頁”功能來說,要是變成只有一次與數(shù)據(jù)庫打交道,那就是對(duì)性能有大提升。Entity Framework 自身是沒有提供這樣的方法。
? ? Entity Framework Plus 庫 Query Future 擴(kuò)展,是一個(gè)對(duì)Entity Framework 功能的延伸和擴(kuò)展,能夠做到減少數(shù)據(jù)庫打交道次數(shù)。使查詢性能更高。
?一 . Entity Framework Plus 庫 Query Future 安裝
1. ?解決方案 還是我上一篇?第一篇 Entity Framework Plus 之 Audit?用的解決方案“EntityFrameworkPlusSolution”,新增 “EntityFrameworkPlus.QueryFuture.Demo” 控制臺(tái)項(xiàng)目,作為Entity Framework Plus 庫 Query Future 擴(kuò)展 應(yīng)用和展示功能項(xiàng)目。項(xiàng)目結(jié)構(gòu)截圖如下
?
項(xiàng)目關(guān)系圖 (代碼圖)
2. 為了方便Demo,新增商品業(yè)務(wù) 相關(guān)的 Model,Mapping,以及改動(dòng)DbContext 如下代碼
GoodsModel
GoodsMap
EntityFrameworkPlusDbContext?
3. 右鍵?“EntityFrameworkPlus.QueryFuture.Demo” 項(xiàng)目,選擇“管理NuGet程序包”,關(guān)聯(lián)部分 ?右上角搜索“Z.EntityFramework.Plus” ,然后選擇 “EntityFramework Plus (EF6) | Query Deferred”&“EntityFramework Plus (EF6) | Query Futurn” 兩項(xiàng)安裝
二.?Entity Framework Plus ?庫?Query Future 擴(kuò)展功能實(shí)作
1. 在 “EntityFrameworkPlus.QueryFuture.Demo” 項(xiàng)目 Program 新增3個(gè)靜態(tài)方法,分別是?
FindOrdersWithGoodsies() ?查詢訂單信息和商品信息
FindPagerOrders(int pageSize, int pageIndex, out int totalCount) ?訂單分頁查詢
FindGoodsMaxWithMinUnitPrice()?查詢單價(jià)最大和最小的商品
詳細(xì)代碼如下
2. ?3個(gè)方法的SQL追蹤和截圖
FindOrdersWithGoodsiesFindPagerOrders(int pageSize, int pageIndex, out int totalCount)
FindGoodsMaxWithMinUnitPrice()
至此比較常用到場(chǎng)景,就已經(jīng)實(shí)作完成,大家看到截圖和SQL說明都是一次執(zhí)行,其他大家可以根據(jù)?EntityFramework Plus?源代碼和文檔(不過是英文,但是基本能夠看懂),進(jìn)行更加深入的了解,了解實(shí)現(xiàn)原理,我這里還是拋磚引玉一下。
這篇博文的源代碼:https://github.com/haibozhou1011/EntityFramework-PlusSample
相關(guān)文章
第一篇 Entity Framework Plus 之 Audit
Entity Framework教程(第二版)
原文地址:http://www.cnblogs.com/davidzhou/p/5376598.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的第二篇 Entity Framework Plus 之 Query Future的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软CEO纳德拉恢弘计划:让开发者始终忘
- 下一篇: 程序员欢呼:微软Bing开始支持搜索源码