EF學習和使用(六)顯式載入、按需載入
這篇部落格接著說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所謂的四種載入資料的方式都已經介紹完了, 相信大家對這幾種方式都有了一定的認知,知道了在什麼情況下使用何種方式較好。就像前面所說,選擇什麼樣的資料載入方式需要因時而異,每一種資料載入方式都有它存在的意義,但目的只有一個,那就是以最小的代價獲取到需要的資料。
相關推薦
EF學習和使用(六)顯式載入、按需載入
這篇部落格接著說EF載入資料的方式,今天介紹剩下的兩種:顯式載入和按需載入。 顯式載入(Explicit Loading) 顯式載入和延遲載入非常類似,不同的是顯式載入要手動關閉EF的延
Scala學習筆記(六):本地函式、頭等函式、佔位符和部分應用函式
本地函式 可以在方法內定義方法,這種方法叫本地函式,本地函式可以直接訪問父函式的引數 def parent(x: Int, y: Int): Unit ={ def child(y:Int) = y + 1 val z = child(y) println(s"x: $x, z
微信小程式學習筆記(六)檔案上傳、下載
(以上傳圖片為例) 後臺上傳介面Upload.php:(tp5) <?php namespace app\home\controller; use think\Controller; class Upload extends First { //上傳
Nodejs學習筆記(六)----- 模塊系統和函數
參數 spa 而且 split response 另一個 簡約 也有 方法 Node.js模塊系統------->有開發基礎很好理解 為了讓Node.js的文件可以相互調用,Node.js提供了一個簡單的模塊系統。 模塊是Node.js 應用程序的基本組成部分,文件和
Elasticsearch學習筆記(六)核心概念和分片shard機制
服務器 存儲 play wid 讀寫 number 容錯 組成 操作 一、核心概念 1、近實時(Near Realtime NRT) (1)從寫入數據到數據可以被搜索到有一個小延遲(大概1秒); (2)基於es執行搜索和分析可以達到秒級
算法學習筆記(六) 二叉樹和圖遍歷—深搜 DFS 與廣搜 BFS
創建 mark preorder 第一個 高度 變量初始化 term link 文章 圖的深搜與廣搜 復習下二叉樹、圖的深搜與廣搜。從圖的遍歷說起。圖的遍歷方法有兩種:深度優先遍歷(Depth First Search),
Activiti學習筆記(六)Activiti的流程引擎API和服務
引擎API是與Activiti互動的最常見方式。中心起點是ProcessEngine,可以通過多種方式建立,如《Activiti學習筆記(三)獲取ProcessEngine物件的多種方式》。 從ProcessEngine中,可以獲得包含工作流BPM方法的各種服務。一下是Activiti的模型圖 一共有
機器學習實踐(六)—sklearn之轉換器和估計器
一、sklearn轉換器 想一下之前做的特徵工程的步驟? 1 例項化 (例項化的是一個轉換器類(Transformer)) 2 呼叫fit_transform(對於文件建立分類詞頻矩陣,不能同時呼叫) 我們
MyBatis學習總結(六)---使用log4j2將sql語句執行記錄輸出控制檯和檔案中
在上一篇部落格中我簡單的介紹了在MyBatis中如何使用日誌,並給出了一個在MyBatis中使用log4j的示例。 MyBatis中日誌的使用及使用log4j示例 下面介紹在MyBatis中如何使用log4j2將sql語句執行記錄輸出控制
Spring 學習筆記(六)AOP 之思想概念和作用、JDK代理與Cglib子類代理
概念 AOP為Aspect Oriented Programming的縮寫,意味:面向切面程式設計。 與IOC一樣,是一種思想。 作用 對業務邏輯進行分離,降低耦合度,提高程式的重用性,提高開發效率。 JDK動態代理(介面代理) 弱點:JDK動態代理
北京大學MOOC C++學習筆記(六)輸入輸出和檔案操作
輸入輸出相關的類 與輸入輸出流操作相關的類: istream是用於輸入的流類,cin就是該類的物件。 ostream是用於輸出的流類,cout就是該類的物件。 ifstream是用於從檔案讀取資料的類。 ofstream是用於向檔案寫入資料的類。 iostream
《機器學習實戰》學習筆記(六)之提升和Adaboost(上)基礎理論以及演算法推導
轉載請註明作者和出處:http://blog.csdn.net/john_bh/ CSDN部落格專欄:## Github程式碼獲取:## 執行平臺: Windows Python版本: Python3.6 IDE: Sublime text3
JavaWeb學習筆記 (六)重定向和請求轉發
一. 重定向 有兩種程式碼寫法 1.寫法一 response.setStatus(302) response.setHeader("Location","轉向網址的絕對路徑或相對路徑"); 2.寫法二 response.sendDirection("轉向網
SpringBoot學習筆記(六):SpringBoot實現Shiro登入控制和許可權控制
登入模組:在登入時必須呼叫 授權模組:不是一登入就調動,而是當角色許可權控制時才會呼叫 登入控制 環境搭建在上一篇。 資料庫表 表名:role 欄位:id rolename 表名:user 欄位:id username sex roleid 在程式碼中簡歷資料庫表對應的實
學習筆記(六)ubuntu16.04下Sublime Text3配置anaconda和tensorflow
注:本文非標準教程,僅是總結個人學習過程,可能存在紕漏,如有錯誤之處歡迎留言告知,非常感謝 上一篇學習筆記是使用IPYTHON去編譯tensorflow,但是我沒有圖形化介面實在不習慣,於是下了很多 IDE嘗試去編譯tensorflow,但是一律都是
ROS學習筆記(六)理解ROS服務和引數
1.ROS 服務 服務(services)是節點間通訊的另一種方法,服務允許節點發送一個服務或者接收一個服務 2.使用rosservice 一些相關用法 rosservice list print information about active services r
Cesium學習筆記(六):幾何和外觀(Geometry and Appearances)
我們先直接來看一個例子 var viewer = new Cesium.Viewer('cesiumContainer'); var flag = viewer.entities.add({ rectangle : { coord
MyBatis學習筆記(六)一對多的關聯查詢和傳遞多個引數
首發於我的部落格 和尚的部落格 本文講解一對多的關聯查詢,傳遞多個引數。 1.傳遞多個引數 當你的形參傳遞>1個的時候,parameterType不寫,讓其自動處理 #{值},預設為arg0,arg1…..或param1,param2,,,
TensorFlow學習系列(六):變數更新和控制依賴
這篇教程是翻譯Morgan寫的TensorFlow教程,作者已經授權翻譯,這是原文。 目錄 在本文中,我們將圍繞變數更新和控制依賴討論更深層次的 TensorFlow 能力。 變數更新 到目前為止,我們已經
mybatis學習筆記(六)使用generator生成mybatis基礎配置程式碼和目錄結構
建立maven專案 <span style="font-size:14px;"><project xmlns="http://maven.apache.org/POM/4.0.0"