2010-04-04 21 views
8

Ich habe Entity Framework gelesen und die Leute haben geweint, warum es nicht implizite Lazy Loading oder so etwas gab. Im Grunde habe ich nach Dingen über Lazy Loading gesucht und jetzt weiß ich, was es ist: Es ist ein Entwurfsmuster, das uns erlaubt, Objekte zu laden, wenn sie wirklich benötigt werden.Implizite Lazy Loading vs Explizite Lazy Loading

Aber was ist der Unterschied zwischen Explicit Lazy Loading-und Implizite Lazy Loading-.

Vielen Dank im Voraus ...

Antwort

5

Wenn Sie z.B. Wenn Sie eine Entität "OrderRow" und eine andere Entität "Order" haben, wird auf der OrderRow eine Navigationseigenschaft angezeigt, die auf die Bestellung verweist, zu der sie gehört.

Derzeit Entity Framework unterstützt nur Explicit Lazy Load was bedeutet, dass, wenn Sie eine Reihe von OrderRows retreived haben und wollen etwas über die Bestellung zu überprüfen, müssen Sie:

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

or.Order.Cancel(); 

Allerdings, wenn Sie implizite haben Lazy Loading Sie brauchen nicht die IsLoaded Prüfung, es wird automatisch erledigt, Sie können or.Order.Cancel() direkt tun und die Bestellung wird bei Bedarf automatisch geladen. So funktioniert linq-to-sql und es spart Tipping und ein gewisses Risiko für Fehler. Auf der anderen Seite wird weniger klar, wann und wie der Datenbankzugriff durchgeführt wird. Mit implizitem Laden ist es einfach, ineffizienten Code zu schreiben, der für jede Zeile, die aus einer Tabelle abgerufen werden soll, einen DB-Roundtrip macht.

+0

Sie meinen also explizit Lazy Loading ist für verwandte Tabellen erforderlich? – Tarik

+0

Nein, Implizites Laden bedeutet, dass die zugehörigen Tabellen automatisch im Hintergrund geladen werden. –

+0

.. mehr wie im Vordergrund. Die Ausführung wird blockiert, bis sie abgerufen wird. –

4

Explicit bedeutet, dass Sie Ihren Code zu faul Last explizit geschrieben.

Implizit bedeutet, dass das Framework (in diesem Fall EF) lazy lädt sich selbst, ob Sie beabsichtigt oder nicht.