Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Entity Framework Core Grundkurs

Selektierte Spalten über Projektionen einschränken

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Wer über das Entity Framework unnötige Spalten selektiert, läuft Gefahr, den SQL Server, das Netzwerk und die Client-PCs zu überlasten. Wie Sie dies verhindern und dem Entity Framework beibringen, nur das zu selektieren, was auch tatsächlich nötig ist, darum geht es in diesem Video.
04:56

Transkript

In dem vorliegenden Beispiel gebe ich eine Liste von Fahrten aus. Genau genommen, die geschäftlichen Fahrten, die in die Kundenstrasse gingen. Zu jeder Fahrt gebe ich die Id, das Datum, die Startzeit, die Endzeit, das Fahrtziel und den Zweck aus. Wenn ich nun das Ganze einmal starte, dann fällt dabei folgendes auf. In dem SQL Statement, was hier oben generiert wurde vom Entity Framework, sehen wir zum Beispiel, dass der Fahrername selektiert wird, oder die Fahrzeug-Id, außerdem die Kilometerstände. Alle diese Felder, die benötige ich allerdings nicht, um meine gewünschte Information darzustellen. Im vorliegenden Beispiel mag das kein Problem sein. Stellen Sie sich aber vor, Sie hätten hier eine Datenbank, in der das Feld "Fahrername", was unnötig selektiert wird, unheimlich groß wäre. Vielleicht ist ein Lob drin, also binäre Daten, die bis zu mehreren Gigabyte groß sein könnten. Und die werden jedes Mal mitselektiert, wenn Sie Ihre Entität darstellen möchten. Das wäre aus zwei Gründen problematisch. Zum einen, weil der SQL Server das unnötig laden und somit in den eigenen Hauptspeicher schreiben muss. Was bedeutet, dass aus seinem Cash andere Daten wieder herausfliegen. Zum anderen, weil diese unnötigen Daten vielleicht mehrere Gigabyte über das Netzwerk auf Ihren Computer übertragen werden müssen. Aus diesem Grund macht es Sinn, seine Ergebnismenge nur auf die Spalten einzuschränken, die wir wirklich benötigen. Dazu können wir die Select-Anweisung benutzen. Nachdem ich also hier über den DbContext auf ein DbSet zugreife, schreibe ich als nächstes, ehe ich mit der Einschränkung anfange, das Schlüsselwort "Select". An das Schlüsselwort "Select" kann ich nun einen Lambda-Ausdruck übergeben. Und in diesem Lambda-Ausdruck kann ich jetzt ein neues Objekt beschreiben, welches die Spalten beinhaltet, die zurückgegeben werden sollen. Dazu lege ich ein neues anonymes Objekt an über new, geschweifte Klammer auf, geschweifte Klammer zu. Und jetzt sage ich zum Beispiel, dass ich gerne ein Feld "Id" hätte und dass dieses Feld dem Id-Feld aus meiner Ergebnismenge entsprechen soll. Wir sehen hier unten, dass Visual Studio sich gerade beschwert. Und das liegt daran, dass es den Fahrttyp und das Fahrtziel in meinem neuen Objekt noch nicht gibt. Jetzt schaut es so aus, dass ich, wenn ich jetzt die weiteren Felder hinzufüge, immer dort, wo der Name des Felds in dem neuen Objekt gleich dem Namen des Feldes des Quellobjektes ist. In solchen Fällen muss ich den Namen nicht mehr voll qualifizieren, sondern es reicht einfach den Eigenschaftsnamen des Quellobjektes anzugeben. Und jetzt werde ich hier also nach und nach alle Felder aufnehmen, die ich benötige. Und Sie werden sehen, dass die Fehler in Visual Studio immer weniger werden. Natürlich brauchen wir jetzt hier unten noch das Datum, UhrzeitVon, UhrzeitBis. Und wenn ich ein wenig nach rechts scrolle, dann sehen wir, dass wir außerdem noch den Zweck benötigen. Ich kann übrigens auch Spalten mit einem Alias versehen. Bedeutet also, wenn ich lieber möchte, dass das Feld in meiner Ergebnismenge "Fahrtzweck" heißt, dann würde ich hier sagen: Fahrtzweck = x.Zweck Natürlich erhalte ich jetzt hier unten eine Fehlermeldung. Was daran liegt, dass es in meinem Ergebnisobjekt den Zweck als Feld nicht mehr gibt. Hier gibt es jetzt "Fahrtzweck". Wenn ich meine Abfrage nun ausführe, dann werden wir sehen, das nur noch die Felder selektiert werden, die tatsächlich benötigt werden. Wir sehen also hier oben im generierten SQL Statement, dass der Fahrername und die Kilometerstände, sowie die Fahrzeug Id nicht mehr Bestandteil unseres "Select" sind. Außerdem können wir sehen, dass wir für den Zweck keinen Alias im SQL Statement erhalten. Also, es wird hier noch nicht ein Zweck As "Fahrtzweck" herausgerendert, sondern dies geschieht beim Vorgang der Materialisierung, also in dem Schritt, wo das Entity Framework die Ergebnismenge nimmt und in seinen Objekt-Strukturen übersetzt. Wir fassen aber zusammen. Aus diesem Video sollten Sie mitnehmen, dass Sie in dem Moment, wo Sie Daten nur lesen und diese in irgendeiner Form ausgeben möchten, zum Beispiel in einem Report oder auf einer Bildschirm-Maske, dann macht es Sinn tatsächlich nur die Spalten zu selektieren, die Sie auch benötigen. Und das erreichen Sie am einfachsten, indem Sie eine Projektion implementieren. Und Projektion implementieren Sie mit dem "Select"-Schlüsselwort in der Kombination mit einem anonymen Objekt.

Entity Framework Core Grundkurs

Lernen Sie die Features von Microsofts O/R-Mapper kennen und wie Sie ihn in praktischen Anwendungen einsetzen.

2 Std. 29 min (29 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!