簡體   English   中英

隱式延遲加載與顯式延遲加載

[英]Implicit Lazy Loading vs Explicit Lazy Loading

我一直在閱讀實體框架,人們在為什么沒有隱式延遲加載或其他東西而哭泣。 基本上我一直在搜索有關Lazy Loading的事情,現在我知道它是什么:它是一種設計模式,它允許我們在真正需要時加載對象。

但是顯式延遲加載和 延遲加載之間有什么區別。

提前致謝...

如果您有一個實體“OrderRow”和另一個實體“Order”,OrderRow上會有一個指向它所屬的訂單的導航屬性

目前,實體框架僅支持顯式延遲加載,這意味着如果您已經檢索了許多OrderRows並想要檢查訂單上的某些內容,則需要:

// or is an OrderRow
if(!or.Order.IsLoaded)
    or.Order.Load()

or.Order.Cancel();

但是,如果您有隱式延遲加載,則不需要IsLoaded檢查,它將自動完成,您可以直接執行or.Order.Cancel() ,並且如果需要,將自動加載Order。 這就是linq-to-sql的工作方式,它可以節省一些打字和一些錯誤的風險。 另一方面,它使得不太清楚何時以及如何執行數據庫訪問。 使用隱式加載,很容易編寫低效的代碼,使得從表中獲取每行的一個DB往返。

顯式表示您將代碼顯式寫入延遲加載。

隱式意味着框架(在本例中為EF)會自行進行延遲加載,無論您是否打算加入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM