Wenn ich eine Blog-Entität mit einer BlogEntries-Sammlung habe, die Hunderte von Einträgen enthalten kann, gibt es eine Möglichkeit, serverseitige Paging-Funktionalität zuerst mit EF-Code hinzuzufügen? Zum Beispiel, wenn ich eine typische .Skip (x) .Take (y) wie Sie auf einem DbSet tun würde, wird es die gesamte Sammlung faul laden und es im Speicher ablegen?In Entity Framework-Code gibt es zuerst eine Möglichkeit zum Hinzufügen von Paging zu Navigationssammlungen?
7
A
Antwort
14
Wenn Sie direkt DbSet
abfragen, können Sie Take und Skip verwenden, und es wird tatsächlich auf dem Datenbankserver gepauscht (diese Methodenaufrufe werden in SQL übersetzt). So funktioniert das wie erwartet:
// Loads only 10 expected entries through Linq-to-entities
var entries = context.BlogEntries.OrderBy(e => e.Date).Skip(10).Take(10);
Beachten Sie, dass Paging-Navigationseigenschaften auf geladene Einheit nicht auf diese Weise funktioniert:
var blog = context.Blogs.First();
// Lazy loading always loads all related entries and executes ordering and
// paging through Linq-to-objects!
var entires = blog.BlogEntries.OrderBy(e => e.Date).Skip(10).Take(10);
Wenn Sie das Paging auf Navigationseigenschaft erhalten möchten, müssen Sie explizite Laden verwenden
var blog = context.Blogs.First();
var dbEntry = context.Entry(blog);
// This is the way to use Linq-to-entities on navigation property and
// load only subset of related entities
var entries = dbEntry.Collection(b => b.BlogEntries)
.Query()
.OrderBy(e => e.Date)
.Skip(10)
.Take(10)
.Load();
Verwandte Themen
- 1. Gibt es eine Möglichkeit, Funktionsparameter zuerst in Haddock zu beschreiben?
- 2. Gibt es eine Möglichkeit, PreparedStatement zu aktualisieren?
- 3. Es gibt eine Methode zum Paging nur mit ANSI SQL?
- 4. gibt es eine Möglichkeit zum Hinzufügen von Blöcken zu NSOperationQueue wie diese
- 5. Gibt es eine Möglichkeit, eine leere Lösung (.sln) zuerst zu erstellen und dann Projekte hinzuzufügen?
- 6. Gibt es eine Möglichkeit, hsqldb Protokollierung zum Schweigen zu bringen?
- 7. Paging in Entity Framework
- 8. Gibt es eine Möglichkeit, Diagramm für Localdb zu erstellen?
- 9. Gibt es eine Möglichkeit, `dynamic` in Lambda-Ausdrucksbaum zu verwenden?
- 10. Die beste Möglichkeit zum Deaktivieren von ViewPager Paging
- 11. Gibt es eine Möglichkeit, Ansichten in NavigationView Header zu steuern?
- 12. Gibt es eine Möglichkeit, Mehrfacheinspritzung zu propagieren?
- 13. Gibt es eine Möglichkeit, Fenstereigenschaften zu verbergen?
- 14. Gibt es eine Möglichkeit, eine Schaltfläche zum Anhängen einer Datei an eine E-Mail hinzuzufügen?
- 15. gibt es eine Möglichkeit zum Hinzufügen eines Standardkonstruktors zu einer Schnittstelle
- 16. Gibt es eine Möglichkeit zum Scrollen in einem WPF ScrollViewer?
- 17. Gibt es eine Möglichkeit zum Bereitstellen einzelner Bericht in SSRS
- 18. Gibt es eine Möglichkeit, "träge" zu lesen?
- 19. Gibt es eine Möglichkeit, Datenbanktransaktionen zu beschleunigen?
- 20. Gibt es eine Möglichkeit zum Ändern der Zeichnungsreihenfolge in WPF
- 21. Gibt es eine Möglichkeit, django.db.connection.queries zu löschen?
- 22. Entity Framework Paging
- 23. Gibt es eine Möglichkeit, ConfigurationManager.AppSettings zu überschreiben?
- 24. Gibt es eine Möglichkeit, Kovarianz zu deklarieren?
- 25. Gibt es eine Möglichkeit, eine Datei in ClearCase von einem Zweig zum anderen zu verschieben?
- 26. Gibt es eine Möglichkeit zum Hibernieren einer Anwendung?
- 27. Gibt es eine Möglichkeit, eine Entity mit ihrem EntityKey zu löschen, ohne sie zu laden?
- 28. Gibt es eine Möglichkeit, Typdeklarationen zu erweitern?
- 29. Datei zum tar-Archiv hinzufügen, ohne sie zuerst zu speichern
- 30. Gibt es eine Möglichkeit, Webkonsolenfehler zu erkennen?
Danke! Ich bin froh, dass es eine Hintertür gibt, um dies mit EF zu erreichen. Ich hoffe, in zukünftigen Versionen wird es einen Weg geben, dies eingebaut zu machen, so dass wir nicht zum DbContext gehen müssen, um dies zu erreichen. Weißt du, ob es .Count() und .Any() tut, ohne die Sammlung zu laden (mit Select Count (1) und wenn Existiert in SQL) wie NHibernate? – Jason
Die Navigationseigenschaft lädt immer alle zugehörigen Entitäten, auch wenn Sie sie nur zählen möchten. Um 'Count 'zu unterstützen, benötigen Sie [extra laden] (http://data.uservoice.com/forums/72025-entity-framework-feature-suggestions/suggestions/1050591-extra-lazy-loading). –
Wenn wir '.Load()' im selben Datenkontext erneut aufrufen, fügt * die nächste Seite der Sammlung hinzu, anstatt sie zu ersetzen. Gibt es einen anderen Weg, als einen neuen Datenkontext zu erstellen? – Cocowalla