POCO系列之 延遲載入

2022-09-17 08:24:13 字數 1153 閱讀 5213

當我們進行查詢的時候,哪些關係的資料將會被載入到記憶體呢?所有相關的物件都需要嗎?在一些場合可能有意義,例如,當查詢的實體僅僅擁有乙個相關的子實體,但是,多數情況下,你可能只需要載入部分資料,或者你喜歡的話,載入更多的資料。

在ef4中支援延遲載入功能,那poco是否也支援延遲載入呢。這個答案是肯定的。在poco中支援延遲載入必需完成以下兩個步驟:

1、在需要延遲載入的屬性前加上virtual ,該屬性的型別可以是任務的集合型別icolloct或者是0/1..1關聯屬性。

例如,更新category實體類,使之支援延遲載入12

3456

7publicclasscategory

publicstringcategoryname

publicstringdescription

publicbytepicture

publicvirtuallistproducts

...

2、在context構造器中開啟延遲載入功能:

publicnorthwindcontext() :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 ...