第二篇 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追蹤和截圖
FindOrdersWithGoodsiesFindPagerOrders(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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软CEO纳德拉恢弘计划:让开发者始终忘
- 下一篇: .NET FM的未来计划