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

Mapping eines Domänenmodells

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Um ein bestehendes Domänenobjekt mit dem Entity Framework zu verknüpfen, sind mehrere Schritte erforderlich: Neben der Installation des Entity Frameworks und der Tools muss noch ein Datenbank-Kontext erzeugt werden.
09:06

Transkript

Um ein Domain-Modell mit dem Entity Framework in eine Datenbank zu persistieren, sind einige vorbereitende Schritte notwendig. Zum einen benötigen wir natürlich ein Modell. Und das habe ich hier in meiner Beispielanwendung bereits angelegt. Zum anderen müssten wir das Entity Framework zu unserem Projekt hinzufügen. Das geschieht am einfachsten über die Paket-Manager-Konsole, indem ich Install-Package Microsoft.EntityFrameworkCore und dann in meinem Fall .SqlServer für die SQL Server Variante tippe und mit Enter bestätige. Das Paket wird jetzt installiert. Außerdem brauche ich anschließend noch die Tools, mit denen ich aus meinem Modell dann auch eine Datenbank erzeugen kann. Diese Tools, die installiere ich über Install-Package Microsoft.EntityFrameworkCore.Tools Und zum Zeitpunkt dieser Aufnahme sind die noch im Preview Stadium, obwohl das Entity Framework schon fertig ist. Deswegen füge ich noch -Pre hinten dran. Sie sollten testen, ob Sie das, wenn Sie das Ganze ausprobieren, noch brauchen. Bedeutet also, ob da die Tools schon fertig sind oder eben noch im Preview Stadium. Wenn ich jetzt beides habe, wenn ich jetzt also mein Modell habe und zum Modell hinzugefügt die Laufzeitbibliotheken und die Tools, dann brauche ich als Nächstes einen DbContext. Und so ein DbContext, das ist die Klasse, die später für uns die Verbindung zur Datenbank schafft. Und dazu lege ich eine ganz einfache Klasse an. Die nenne ich jetzt "FahrtenbuchDb". Ich mache das in der Regel so, dass ich den Namen meines Geschäftsumfelds nehme, was ich hier habe... Also, meine Geschäftsdomaine, das ist jetzt hier das Fahrtenbuch. ...und daran "Db" hänge. Diese Klasse, die ist öffentlich. Und die erbt von DbContext. Und da der Namensraum aktuell nicht bekannt ist, kann ich ihn über Strg + Punkt importieren. Und das ist dann dieses using Microsoft.EntityFramework.Core, was wir nun auch in der Zeile 1 sehen. In so einem DbContext benötige ich für jede der Entitäten, die später aus der Datenbank gelesen beziehungsweise auch da reingeschrieben werden sollen, und die ich direkt zugreifen möchte über die Route des Kontextes, für jede dieser Entitäten benötige ich also einen DbSet. Also, ich habe eine Eigenschaft public DbSet vom Typ "Fahrt". Und die nenne ich "Fahrten". Und sage hier "get; set;" Dann habe ich das Gleiche für meine Fahrer. Das ist die nächste Domain-Klasse. Hier ist einfach "Fahrer" die Eigenschaft. Und dann mache ich das Ganze auch noch für die Fahrzeuge. "Fahrzeug" natürlich. Was ich nicht in einen DbSet überführen muss, ist der Fahrttyp, denn das ist hier ein einfaches Enum. Abgesehen von diesen DbSets, muss ich nun noch die Verbindung zu meiner Datenbank konfigurieren. Das geschieht, indem ich die Methode OnConfiguring überschreibe. Und hier schaut es so aus, dass ich diesem OptionsBuilder-Objekt nun mitteilen muss, welchen Datenbanktyp ich benutze. In meinem Fall ist das ein SQL Server. Und als Argument an diese Methode UseSqlServer gebe ich den Connection String. Und mein Server ist die LocalDb, und zwar die mssqllocaldb. Außerdem muss ich noch den Datenbanknamen angeben. Und das ist in meinem Fall die "Fahrtenbuch" Datenbank. Und ich benötige den Hinweis, dass ich über meine Windows Credentials zugreifen möchte. Heißt, Trusted_Connection = True. Am Ende darf ich das Semikolon nicht vergessen. Hier, genauso wenig. Und jetzt ist mein DbSet soweit konfiguriert. Das ist also der nächste Schritt. Schritt Nummer 1 ist: ich muss die Referenzen hinzufügen. Schritt Nummer 2 ist: ich muss mein DbSet hinzufügen. Wenn ich jetzt einmal weiterschaue und mir hier einmal den Fahrer zum Beispiel ansehe, dann sehe ich, dass ich hier bisher nur reine Informationen habe, die einen Fahrer beschreiben. In so einer Datenbank ist es aber wichtig, dass jedes Element oder jeder Datensatz, den ich später laden und auch schreiben möchte, dass der einen Primärschlüssel hat. Und so eine Eigenschaft für den Primärschlüssel, die fehlt hier noch. Also füge ich die jetzt mal hinzu. Und die nenne ich einfach "Id". Wenn ich nämlich eine Eigenschaft "Id" habe, oder eine Eigenschaft die so ist wie meine Entität Plus Id, also FahrerId, dann geht das Entity Framework automatisch davon aus, dass es sich hierbei um den Primärschlüssel handelt. Das Gleiche mache ich dann jetzt noch für die Fahrt. So. Und bei der Fahrt mache ich noch folgendes. Ich habe hier schon bereits den Fahrer. Allerdings möchte ich außerdem noch den Fahrernamen hier als Eigenschaft angeben. Jetzt fragen Sie sich vielleicht, wenn ich auch den Fahrer habe, warum möchte ich dann den Fahrernamen noch zusätzlich speichern? Und das hat ein ganz einfachen Grund. Bei so einem Fahrtenbuch, da muss sichergestellt werden, dass es nachträglich nicht verändert werden kann. Und so wie wir aktuell unsere Daten modelliert haben, da könnten wir es nachträglich versehentlich ändern. Stellen Sie sich vor, ein Fahrer fährt in einem Fahrzeug und wir halten eine Referenz. Und irgendwann heiratet er und ändert seinen Nachnamen. Wenn wir nach der Hochzeit "Fahrten" auswerten möchten, die vor dem Hochzeitstermin liegen, würden wir über diese Referenz den neuen Namen bekommen. Korrekt wäre aber der alte Name. Deswegen speichere ich mir den hier separat, um also gegen nachträgliche Datenänderungen gewappnet zu sein. Was ich außerdem noch mache, ist: ich lege mir für Fahrzeug und Fahrer noch Eigenschaften für die Fremdschlüssel an. Also, prop int FahrerId. Und prop int FahrzeugId. Von der reinen objektorientierten Leere sind diese Eigenschaften nicht notwendig. Warum? Die sind doppelt, denn über das Fahrzeug komme ich bereits an die FahrzeugId heran. In der Praxis, wenn wir schreiben hier "Software für die Praxis", schaut es aber so aus, dass wir uns das Leben um einiges einfacher machen, wenn wir diese Eigenschaften mit in unser Domain wieder aufnehmen. Auch wenn es nach der reinen Leere hinweg redundant ist. Hintergrund ist, dass wir so später relativ simple die Id-Eigenschaft setzten können an einem Objekt, um abhängige Daten zu speichern oder auch wir einfach darauf später filtern können. So, das was ich jetzt hier gemacht habe, das schaue ich mir auch nochmal beim "Fahrzeug" an, denn am "Fahrzeug", da habe ich hier den Standardfahrer hinterlegt und auch für den wollen wir eine Eigenschaft mit einer Id anlegen, nämlich für die StandardFahrerId. Außerdem fehlt mir hier bei der Klasse "Fahrzeug" noch die Eigenschaft "Id" für den Primärschlüssel. So, mit dem was ich jetzt gemacht habe, ist meine Anwendung darauf gewappnet das Entity Framework zu nutzen. Ich habe also über die Paket-Manager-Konsole zwei Pakete hinzugefügt. Einmal Microsoft.EntityFrameworkCore.SqlServer und Entity.FrameworkCore.Tools. Außerdem habe ich mir eine Klasse vom Typ DbContext angelegt. Hier in dieser Klasse DbContext habe ich jetzt für jede Entität, die ich direkt lesen möchte, eine Eigenschaft vom Typ DbSet angelegt. Außerdem habe ich die Methode OnConfiguring überschrieben; hier mitgeteilt, dass ich einen SQL Server nutze; und habe direkt auch den Connection String angegeben. In einer echten Anwendung würde ich diesen nicht hard kodieren, sondern aus der Konfiguration auslesen. In meinen Modell-Klassen habe ich eine kleine Änderung vorgenommen. Änderung Nummer 1 war: ich habe überall eine Id angelegt. Änderung Nummer 2 war: ich habe für abhängige Daten einen Fremdschlüssel mit hinzugefügt.

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!