EF效能之關聯載入

2021-09-08 17:03:59 字數 2379 閱讀 8359

魚和熊掌不能兼得

——中國諺語

entity framework作為乙個優秀的orm框架,它使得運算元據庫就像操作記憶體中的資料一樣,但是這種抽象是有效能代價的,故魚和熊掌不能兼得。但是,通過對ef的學習,可以避免不必要的效能損失。本篇只介紹關聯實體的載入的相關知識,這在我之前的文章中都有介紹。

我們已經了解到ef的關聯實體載入有三種方式:lazy loading,eager loading,explicit loading,其中lazy loading和explicit loading都是延遲載入。

(一)lazy loading使用的是動態**,預設情況下,如果poco類滿足以下兩個條件,ef就使用lazy loading:

poco類是public且不為sealed。

導航屬性標記為virtual。

關閉lazy loading,可以將lazyloadingenabled設為false,如果導航屬性沒有標記為virtual,lazy loading也是不起作用的。

(二)eager loading使用include方法關聯預先載入的實體。

(三)explicit loading使用entry方法,對於集合使用collection,單個實體則使用reference。

下面通過例項來理解這幾種載入方式。

有下面三個實體:province,city,governor,乙個province有多個city,並且只有乙個governor。

1:  

public

class province

2:
4:  

public

string name

5:
6:  

public

virtual governor governor

7:
8:  

public

virtual listcities

9:      }
10:
11:  

public

class city

12:
14:  

public

string name

15:      }
16:
17:
18:  

public

class governor

19:
21:  

public

string name

22:      }

lazy loading

1:  

private

static

void lazyloading(efloadingcontext ctx)

2:
11:          }

eager loading

1:  

private

static

void eagerloading(efloadingcontext ctx)

2:
10:          }

explicti loading

1:  

private

static

void explicitloading(efloadingcontext ctx)

2:
15:          }

print方法

1:  

private

static

void print(province province)

2:          】,市:【】,省長:【】", province.name, string.join(",", province.cities.select(t => t.name)), province.governor.name);
4:          }

關於關聯載入實體基本上就是這些內容吧,如果想看這部分詳細的介紹,可以參考我這篇文章的後半部分。總的來說,這部分比較簡單,乙個lazyloadingenabled設定,三種載入方式。lazy loading會生成大量的sql,eager loading生成的關聯查詢比較負責,explicit loading同lazy loading一樣生成很多的sql,但是有一些其他優點,比如:導航屬性可以不用標註為virtual。如果這幾種關聯都不能解決實際問題,可以直接使用sql查詢。

EF效能之關聯載入

entity framework作為乙個優秀的orm框架,它使得運算元據庫就像操作記憶體中的資料一樣,但是這種抽象是有效能代價的,故魚和熊掌不能兼得。但是,通過對ef的學習,可以避免不必要的效能損失。本篇只介紹關聯實體的載入的相關知識,這在我之前的文章中都有介紹。我們已經了解到ef的關聯實體載入有三...

EF效能之關聯載入

魚和熊掌不能兼得 中國諺語 entity framework作為乙個優秀的orm框架,它使得運算元據庫就像操作記憶體中的資料一樣,但是這種抽象是有效能代價的,故魚和熊掌不能兼得。但是,通過對ef的學習,可以避免不必要的效能損失。本篇只介紹關聯實體的載入的相關知識,這在我之前的文章中都有介紹。我們已經...

EF之關聯載入

entity framework作為乙個優秀的orm框架,它使得運算元據庫就像操作記憶體中的資料一樣,但是這種抽象是有效能代價的,故魚和熊掌不能兼得。但是,通過對ef的學習,可以避免不必要的效能損失。本篇只介紹關聯實體的載入的相關知識,這在我之前的文章中都有介紹。我們已經了解到ef的關聯實體載入有三...