EF: Lazy Loading, Eager Loading und "Enumerable aufzählen"

Ich finde, ich bin verwirrt über lazy loading, usw.

Ersten, sind diese beiden Aussagen äquivalent:

(1) Lazy loading:
_flaggedDates = context.FlaggedDates.Include("scheduledSchools")
.Include  ("interviews").Include("partialDayAvailableBlocks")
.Include("visit").Include("events");

(2) Eager loading:
_flaggedDates = context.FlaggedDates;

In anderen Worten, in (1) "Includes" bewirken, dass die navigation Sammlungen/Eigenschaften geladen werden zusammen mit den spezifischen Sammlung angefordert, unabhängig von der Tatsache, dass Sie mit lazy loading ... richtig?

Und in (2), die Anweisung " load all der navigation Entitäten, auch wenn Sie nicht speziell anfordern, weil Sie mit eager loading ... richtig?

Zweitens: selbst wenn Sie mit eager loading werden die Daten nicht tatsächlich heruntergeladen werden, aus der Datenbank, bis Sie "aufzählen, die enumerable", wie im folgenden code:

var dates = from d in _flaggedDates
            where d.dateID = 2
            select d;
foreach (FlaggedDate date in dates)
{
... etc.
}

Werden die Daten nicht tatsächlich heruntergeladen werden ("aufgelistet"), bis die foreach-Schleife ... richtig? In anderen Worten, die "var Termine" - Zeile definiert die Abfrage, aber die Abfrage wird nicht ausgeführt, bevor die foreach-Schleife.

Gegeben, dass (wenn meine Annahmen richtig sind), was ist der wirkliche Unterschied zwischen eager loading und lazy loading?? Es scheint, dass in beiden Fällen werden die Daten nicht angezeigt, bis die enumeration. Bin ich etwas fehlt?

(Meine konkrete Erfahrung mit code-first, POCO Entwicklung, die durch die Art und Weise ... aber die Fragen kann gilt mehr allgemein.)

InformationsquelleAutor der Frage Cynthia | 2010-09-16

Schreibe einen Kommentar