導航屬性的延遲載入與迴圈

2022-06-13 07:03:07 字數 548 閱讀 1672

entityframework 實體模型的導航屬性(即與當前表有外來鍵關係的關聯表)通常標記為 virtual,標記為 virtual 之後,相應屬性的資料是具有延遲載入的特性的,只有真正用到相應屬性的資料時,才會根據外來鍵關係執行相應的查詢動作,載入相應的資料。延遲載入的特性,能給系統效能帶來優化,因為載入主幹實體時只載入主幹實體的資訊,不會把關聯實體的資訊都載入進來,關聯實體的資料只有用到的時候都會去載入。但也正是因為延遲載入,導航屬性的資料是用到一次就執行一次查詢動作,載入一次資料,一次還如,如果對於相同實體,需要多次用到同乙個導航屬性,就會產生多次重複的查詢動作來載入導航屬性的資料,給系統帶來效能問題。例如如下的操作:

正確的做法,當需要在迴圈中使用導航屬性時,應在迴圈之前載入主幹實體資料時,把導航屬性的資料使用 include 查詢一起載入:

ef延遲載入不到導航屬性問題

最近做專案踩到了乙個ef問題上的坑,導航屬性 外來鍵關鍵,如子表或主表等 出來後是null,外鍵值也對,資料庫和ef的關係配置也都正確,就是載入不出來。後來發現實體裡導航屬性前少了個virtual修飾符。總結教訓如下 1 要用導航屬性,前面必須有virtual,虛屬性或方法,被ef的procy 類重...

Hibernate 的延遲載入 lazy 屬性

感覺下面的這篇文章還不錯。不過還是有點問題。如 lazy true fetch join 這些。明顯記得這樣設定lazy會失效的,無法做到延遲載入。one to one 預設情況下,對主物件的查詢,不會使用懶載入,直接的就通過 左外連線 left outer join 關聯查詢,把從物件的資訊一併拿...

延遲的載入

get和load乙個實體時,get會立即返回實體,而load返回的是乙個 只有你訪問了該實體的屬性,才會真正從資料庫裡讀取,這個你可以看他有沒有發出sql語句就可以證明。另乙個就是對映關係時,比如一對多,一這裡定義了乙個多的一方的集合,延遲的載入的話就不會載入關聯的實體 延遲載入分類 01.類級別的...