EF 三種載入方式

2021-10-17 04:16:16 字數 2818 閱讀 6066

ef資料載入三種方式:延遲載入飢餓載入顯示載入ef中預設是開啟延遲載入

延遲載入(lazy loading) 和**的商品列表一樣,下拉重新整理,按需載入。

飢餓載入 (eager loading) 載入父物件時同時載入子物件。

顯式載入 (explicitly loading)當我們禁用了延遲載入,仍然可以通過顯式載入來延遲載入相關實體。

webcentercontext db =

newwebcentercontext()

;// 監聽日誌,將與資料庫之間的每一步操作都會列印出來

db.database.log =s=

>

;

特別注意:關閉延遲載入後,查詢主表資料時候,主表的中從表實體為null。

全域性配置:在資料庫上下文的構造方法中新增this.configuration.lazyloadingenabled = true;也可以在使用的時候單獨配置。

延遲載入 true:開啟,false:關閉,預設就是延遲載入的。

延遲載入的資料在使用的時候才會載入出來,在迴圈遍歷資料的時候建議使用延遲載入。

每次呼叫子實體(外來鍵所在的實體)的時候,才去查詢資料庫. 主表資料載入的時候,不去查詢外來鍵所在的從表。

需要滿足的條件:

①:poco類是public且不能為sealed;

②:關聯屬性需要標記為virtual;

開啟延遲載入的狀態:

using

(webcentercontext db =

newwebcentercontext()

),姓名:"

, user.code, user.name)

;//下面呼叫導航屬性(一對一的關係) 每次呼叫時,都要去查詢資料庫(查詢從表)

var login = user.logininfo;

console.

writeline

(, login.logintime, login.ip);}

}

關閉延遲載入的狀態:

using

(webcentercontext db =

newwebcentercontext()

),學生姓名:"

, user.code, user.name)

;//login 為null,不會再次查詢資料庫,所以此處報錯

var login = user.logininfo;

console.

writeline

(, login.logintime, login.ip);}

}catch

(exception ex)

}

使用步驟:

①:先關閉延遲載入:db.configuration.lazyloadingenabled = false;

②:查詢主表的同時通過include把從表資料也查詢出來;

由於查詢主表的時候通過include已經一次性將資料查詢了出來,所以在呼叫從表資料的時候,均從快取中讀取,無須查詢資料庫。

using

(webcentercontext db =

newwebcentercontext()

),姓名:"

, user.code, user.name)

;//這裡獲取從表中的資料,均是從快取中獲取,無需查詢資料庫

var login = user.logininfo;

console.

writeline

(, login.logintime, login.ip);}

}

關閉延遲載入後,單純查詢主表的資料,後面又想再次查詢從表,這個時候就需要用到顯示載入了。

前提:①:關閉了延遲載入:db.configuration.lazyloadingenabled = false;

②:單純查詢了主表,沒有使用include函式關聯查詢從表;

使用步驟:

①:單個實體用:reference;

②:集合用:collection;

③:最後需要load一下;

using

(webcentercontext db =

newwebcentercontext()

),姓名:"

, user.code, user.name)

;//3.下面的這句話,可以開啟重新查詢一次資料庫

單個屬性的情況用refercence

db.entry

<

userinfo

>

(user)

.reference

(c =

> c.logininfo)

.load()

; 集合的情況用collection

=> c.logininfo).load();

//下面呼叫關聯屬性(一對一的關係) 每次呼叫時,都要去查詢資料庫

var login = a.logininfo;

console.

writeline

(, login.logintime, login.ip);}

}

EF的三種資料載入方式

ef的關聯實體載入有三種方式 lazy loading,eager loading,explicit loading,其中lazy loading和explicit loading都是延遲載入。一 延遲載入 預設 lazy loading使用的是動態 預設情況下,如果poco類滿足以下兩個條件,ef...

EF的三種資料載入方式

ef的關聯實體載入有三種方式 lazy loading,eager loading,explicit loading,其中lazy loading和explicit loading都是延遲載入。一 延遲載入 預設 lazy loading使用的是動態 預設情況下,如果poco類滿足以下兩個條件,ef...

字型載入三種方式

這是一篇很簡短的文章,介紹了 ios 自定義字型載入的三種方式。之後直接使用即可 void staticload void dynamicload else self dynamicfontlabel font uifont fontwithname fontname size 50 cfrelea...