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

Anlegen einer Datenbank über Migrationen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Migrations dienen der Erstellung einer Datenbank mit entsprechenden Tabellen für die Klassen eines Domänenmodells. Diese müssen zunächst separat aktiviert werden.
05:49

Transkript

Das Entity Framework ist dazu in der Lage aus einem Domain-Modell und einem DbContext, so wie wir ihn hier sehen, eine Datenbank zu erzeugen. Das Ganze geschieht über sogenannte Migrationen. Um diese nutzen zu können, muss ich zunächst ein Modell und ein Kontext haben, und außerdem die Entity Framework Tools installiert haben. In meinem Projekt habe ich das über die Paket-Manager-Konsole bereits erledigt. Als Nächstes werde ich nun eine Migration anlegen. Dies geschieht auch in der Paket-Manager-Konsole, und zwar über den Befehl "Add-Migration". So eine Migration, die benötigt einen Namen. Ich nenne sie mal "InitialCreate". Und was nun geschieht, ist: es wird eine Klasse angelegt, beziehungsweise besser gesagt, im ersten Fall sogar zwei Klassen, die zum einen das Datenbank-Modell beschreiben, zum anderen die Änderungen, die notwendig sind, um zum jetzigen Stand des Modells zu gelangen. Was bedeutet das? Wir haben hier die Datei "FahrtenbuchDbModelSnapshot". Diese beschreibt den aktuellen Zustand, den die Datenbank haben sollte. Darüber hinaus habe ich die Klasse "InitialCreate", die in ihrem Namen noch einen Timestamp vorangestellt hat. Und in dieser Klasse habe ich jetzt die Methode "Up" und die Methode "Down". Die Methode "Up" beschreibt, was erledigt werden muss in der Datenbank, damit wir genau zu dem jetzigen Stand des Modells gelangen. Wie wir sehen, muss die Tabelle "Fahrer" angelegt werden mit einigen Tabellen. Außerdem wird hier ein Primärschlüssel vergeben. Dann die Tabelle "Fahrzeuge", die Tabelle "Fahrten". Und auch hier gibt es ein Primärschlüssel und Fremdschlüssel. Außerdem gibt es die Methode "Down". Und um zurückzukehren, müssen alle Tabellen gelöscht werden. Schauen wir uns einmal an wie die Datenbank aussieht, nachdem wir diese Migration ausgeführt haben. Dazu kann ich in der Paket-Manager-Konsole den Befehl "Update-Database" eintippen. Und was jetzt geschieht, ist: es wird sich auf den SQL Server verbunden, der in meinem Connection String hinterlegt ist. Und auf diesem Server wird jetzt, falls noch nicht vorhanden, die Datenbank "FahrtenbuchDb" angelegt, oder zumindest wird dies versucht. Denn wir erhalten hier eine Fehlermeldung. Warum erhalten wir eine Fehlermeldung? Wenn wir uns das Ganze einmal anschauen, dann steht hier, dass der Fremdschlüssel "FK_Fahrten_Fahrzeuge_FahrzeugId" in der Tabelle "Fahrten" mehrere Cyclen oder mehrere kaskadierende Löschpfade ermöglicht. Was heißt das? Das bedeutet, aktuell haben wir die folgende Situation. Wenn wir uns unsere Migration hier noch einmal anschauen, dann sehen wir innerhalb der Migration, dass hier verschiedene onDelete-Regeln angegeben worden sind. Wir haben zum Beispiel hier die Regel: wenn ich eine Fahrt lösche, dann soll auch der Fahrer gelöscht werden. Das Gleiche haben wir allerdings auch beim "Fahrzeug". Und genau hier müssen wir eingreifen, das wäre hier so das Problem. Wie greifen wir ein? Das Problem ist, dass der SQL Server jetzt zwei Kaskadenwege kennt und dass mag er nicht sonderlich. Wenn ich mir das Ganze mal anschaue, dann kann ich das vermeiden, dass hier eine Kaskade angelegt wird, indem ich mal in die Entität "Fahrzeug" hereingehe und hier einfach ein Fragezeichen hinter den Integer bei der StandardFahrerId schreibe. Was heißt das? Das bedeutet, dass dieses Feld später in der Datenbank optional ist. Also, Nullable ist. Und darum generiert das Entity Framework hier keinen Kaskaden. Ich gehe also hin, lösche hier einmal den Migrations-Ordner komplett, denn es wird noch keine vollständige Migration. Hier die Ausgabe lösche ich auch. Und jetzt gebe ich erneut an: Add-Migration InitialCreate. Vorher speichere ich besser mal. Drücke Enter. Und nun Update-Database. Und anschließend wird die Datenbank für mich angelegt. Das Ganze dauert einen kurzen Augenblick, weil nun zunächst eine Verbindung zum Datenbank-Server hergestellt wird. Hier wird jetzt erkannt, dass es die Datenbank auch nicht gab. Und jetzt ist sie angelegt worden. Das Ganze verifizieren wir kurz, indem ich mich hier einmal mit einer Datenbank verbinde, nämlich mit der (localdb)\mssqllocaldb. Und wenn ich jetzt hier die Datenbanknamen aufklappe, dann habe ich hier die "FahrtenbuchDb". Mit der verbinde ich mich. Und hier sehen wir jetzt die Tabellen "Fahrer", "Fahrten" und "Fahrzeuge". Darüber hinaus haben wir noch die Tabelle "_EFMigrationsHistory". Und hier sehen wir, dass es hier Meta-Informationen gibt zu dieser Tabelle. Also, select * from _EFMigrationsHistory. Wenn ich das ausführe, dann sehe ich, dass hier drinsteht, dass meine Migration ausgeführt worden ist, die ich zuvor angelegt habe. Die Tabelle "Fahrer" zum Beispiel, die ist natürlich noch leer, denn da steht noch nichts drin. Um also aus einem Modell eine Datenbank zu erzeugen, gehe ich einfach hin und lege eine Migration an. So eine Migration kann ich über den Befehl "Add-Migration" anlegen und gebe dann den entsprechenden Namen an. Anschließend kann ich diese mit "Update-Database" ausführen. Für den Fall, dass Fehler auftreten, sind die Fehlerbeschreibungen so gut, dass ich mir den Text im besten Fall herausholen kann, kann ihn bei einer Suchmaschine eintragen und finde dann relativ schnell heraus, was das eigentliche Problem gewesen ist.

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!