當我們進行查詢的時候,哪些關係的資料將會被載入到記憶體呢?所有相關的物件都需要嗎?在一些場合可能有意義,例如,當查詢的實體僅僅擁有乙個相關的子實體,但是,多數情況下,你可能只需要載入部分資料,或者你喜歡的話,載入更多的資料。
在ef4中支援延遲載入功能,那poco是否也支援延遲載入呢。這個答案是肯定的。在poco中支援延遲載入必需完成以下兩個步驟:
1、在需要延遲載入的屬性前加上virtual ,該屬性的型別可以是任務的集合型別icolloct或者是0/1..1關聯屬性。
例如,更新category實體類,使之支援延遲載入12
3456
7public
class
category
public
string
categoryname
public
string
description
public
byte
picture
public
virtual
listproducts
...
2、在context構造器中開啟延遲載入功能:
public
northwindcontext() :
base
(
"name=northwindentities"
,
"northwindentities"
)
由於集合是 poco 的集合,所以,在訪問的時候沒有事件發生,ef 通過從你定義的實體派生乙個動態的物件,然後覆蓋你的子實體集合訪問屬性來實現。這就是為什麼需要標記你的子實體集合屬性為 virtual 的原因。
在工程中進行除錯,你會發現例項與你宣告的型別不一至
延遲載入優缺點;
延遲載入:
Mybatis學習系列 延遲載入
舉個例子 如果查詢訂單並且關聯查詢使用者資訊。如果先查詢訂單資訊即可滿足要求,當我們需要查詢使用者資訊時再查詢使用者資訊。把對使用者資訊的按需去查詢就是延遲載入。所以延遲載入即先從單錶查詢 需要時再從關聯表去關聯查詢,大大提高資料庫效能,因為查詢單錶要比關聯查詢多張表速度要快。我們來對比一下 關聯查...
JPA之立即載入與延遲載入
test public void test 根據id查詢客戶 find 立即載入 1 查詢的物件就是當前客戶物件本身 2 在呼叫find方法的時候,就會傳送sql語句查詢資料庫。getrefrence 延遲載入 懶載入 1 獲取的物件是乙個動態 物件 2 在呼叫getrefrence方法的時候,不會...
hibernate之4 延遲載入
延遲載入 只有當使用以實體物件的屬性 除主鍵屬性外 時,才會傳送查詢語句到資料庫 get不支援延遲載入 test public void gettest finally 結果 hibernate select student0 student id as student1 0 0 student0 ...