Was sind die Unterschiede zwischen diesen 3 Ladearten? Kann jemand mit einem Beispiel erklären? Verschiedene Online-Ressourcen verwenden unterschiedliche Definitionen und verursachen mehr Verwirrung als nötig.Lazy loading, Deferred Loading und Eager Loading im Entity-Framework
Antwort
Lazy laden und Deferred sind auch schön (AFAIK, bitte korrigieren Sie mich, wenn ich falsch liege). Der große Unterschied ist zwischen Eager und Faul. Eifrig wird vorne, Faul geschieht nur „nach Bedarf“ und die Ausführung wird geschehen, an der DB Ebene- lassen Sie sich eine einfache JOIN-Anweisung als Beispiel
var people = (from p in people SELECT p).ToList();
var jobs = (from j in jobs SELECT j).ToList();
var peopleAndJobs = (from p in people JOIN j on j.personId equals p.personId SELECT p).ToList()
Dies ist ein Beispiel von eifrigem Laden passieren. Wir bekommen ALLE Leute, ALLE Jobs, und wir machen das Mitmachen. Nicht sehr schlau (normalerweise). Hier sieht es wie Lazy-Style aus.
var people = (from p in people SELECT p);
var jobs = (from j in jobs SELECT j);
var peopleAndJobs = (from p in people JOIN j on j.personId equals p.personId SELECT p).ToList()
Was tut ein IQueryable sowohl für Menschen schafft und Job (IQueryable faul ist), und die Verbindung ist in der DB geschieht. Dies spart Netzwerkaktivität und ist in der Regel tatsächlich schneller, da die DB für Joins und ähnliches optimiert ist.
Sofern wir nicht ausdrücklich sagen: "Ich brauche diese Daten!" (indem man es auflistet, es durchläuft usw.), es ist faul. Es gibt einige Macken, aber das sollte ein guter Grund sein.
Lazy/Deferred Laden: Lazy Loading und Deferred Loading sind die gleiche Sache. Die Beziehung wird geladen, wenn auf sie zum ersten Mal zugegriffen wird. Die Idee ist, dass die Daten nicht geladen werden sollten, wenn sie nicht benötigt werden.
Eager Loading: Die Beziehung wird zusammen mit dem Parent-Objekt abgerufen. Dies kann beim Laden von Daten effizienter sein, lädt jedoch Daten unabhängig von den verwendeten/nicht verwendeten Daten.
Wenn Objekte von einer Abfrage zurückgegeben werden, werden zugehörige Objekte nicht gleichzeitig geladen.
Stattdessen werden sie automatisch geladen, wenn auf die Navigationseigenschaft zugegriffen wird. Auch bekannt als "Lazy Loading",
- 1. Lazy Loading vs Eager Loading
- 2. Lazy loading, Deferred Laden, eifrig Loading LINQ
- 3. Schienen 3: Lazy Loading versus Eager Loading
- 4. Wann Lazy Loading/Eager Loading im Winterschlaf verwenden?
- 5. Implizite Lazy Loading vs Explizite Lazy Loading
- 6. Verschiedene Ergebnisse mit Laravel Lazy Eager Loading
- 7. lazy loading und $ ocLazyLoad
- 8. Warum Hibernate @OneToOne und @ManyToOne verwendet Eager Loading und @OneToMany und @ManyToMany verwendet Lazy Loading?
- 9. gwt lazy loading
- 10. Lazy Loading UICollectionView Bilder
- 11. ASP.NET HoverMenuExtender Lazy Loading
- 12. UITableView Lazy Loading Optimierung
- 13. JFreeChart & Lazy loading
- 14. Federdaten Hibernate Lazy Loading
- 15. SQLAlchemy.declarative and deferred column loading
- 16. Doktrin lazy loading
- 17. Verwendet URLClassLoader Lazy Loading?
- 18. webpack 2 lazy loading
- 19. Lazy loading Navigationseigenschaften
- 20. C# Ajax Lazy Loading
- 21. Entity Framework - Was ist der Unterschied zwischen der Verwendung von Include/eager loading und lazy loading?
- 22. Lazy Loading in NHibernate
- 23. Android listview lazy loading
- 24. Lazy Loading with Ninject
- 25. jQuery Cycle Lazy Loading
- 26. Eager loading letzten untergeordneten Datensatz
- 27. Bookshelf.js Eager Loading Dritte Tabelle
- 28. Eager loading mit has_many durch
- 29. NHibernate Eager Loading Sammlungen + Paging
- 30. FirstorDefault() verursacht Lazy Loading oder Eager Loading für Linq zu SQL
HINWEIS - die Syntax ist möglicherweise nicht 100%, nur aus dem Stegreif. –
Für Ihr Beispiel, einmal eine ToList tun, ist es eifrig laden, da es einen DB-Hit, um die Daten zu bekommen. Es scheint also eher ein Programmierstil zu sein. Mit EF gibt es jedoch eine Möglichkeit, LazyLoading in den Kontextoptionen als wahr oder falsch festzulegen. Wie passt das zusammen? – DotnetDude
EF4 mit LazyLoading aus müssen Sie People.Include ("Jobs") sagen, um die Jobs-Datensätze zurück zu holen (vorausgesetzt, dass Jobs zu People FK). Wenn LazyLoading aktiviert ist, werden diese Daten bei Bedarf zurückgegeben. I.E. wenn Sie People.Jobs.ToList() sagen; –