我發現我很困惑延遲加載等EF:延遲加載,渴望裝載和「枚舉枚舉」
首先,是這兩個語句等效:
(1) Lazy loading:
_flaggedDates = context.FlaggedDates.Include("scheduledSchools")
.Include ("interviews").Include("partialDayAvailableBlocks")
.Include("visit").Include("events");
(2) Eager loading:
_flaggedDates = context.FlaggedDates;
在其他詞,(1)「包含」會導致導航集合/屬性與請求的特定集合一起被加載,而不管您使用延遲加載的事實...對嗎?
而在(2)中,即使您沒有專門請求它們,該語句也會加載所有導航實體,因爲您正在使用熱切加載......對吧?
其次:即使您正在使用預先加載,數據實際上不會從數據庫下載到你「枚舉枚舉」,如下面的代碼:
var dates = from d in _flaggedDates
where d.dateID = 2
select d;
foreach (FlaggedDate date in dates)
{
... etc.
}
的數據實際上不會被下載(「枚舉」),直到foreach循環...對嗎?換句話說,「var dates」行定義了查詢,但查詢不會在foreach循環之前執行。由於(如果我的假設是正確的),急切加載和延遲加載之間的真正區別是什麼?????????????????????????????????????????????看來無論哪種情況,直到枚舉纔會顯示數據。我錯過了什麼嗎?
(我的具體的經驗是代碼優先,POCO發展,順便......雖然這些問題可以應用更普遍。)
EntityFramework使用預先加載/延遲加載(加載數據的通用軟件術語)來提取相關對象和集合。被緩存的查詢執行是LINQ的一個工件,它允許查詢更加靈活(在某些情況下,它們可能不會被執行)。 – jwize 2014-11-18 07:26:18