ASP.NET Core Web API mit EF Core Code First Ansatz - Migrations

Ich möchte zunächst einige fundamentale Begriffe und Ansätze erläutern, um anschließend anhand eines Beispiels mit einer ASP.NET Core Web API und dem Entity Framework Core  Code First Ansatz Migrations zu erstellen.

Es gibt verschiedene Möglichkeiten die Datenstruktur einer Datenbank zu modellieren. Model-First, Database-First und Code-First. Jeder Ansatz hat seine Vor- und Nachteile, wir beschäftigen uns hier allerdings mit dem Code-First Ansatz. Ich schneide die beiden anderen Möglichkeiten trotzdem kurz an.

Database-First

Beim Database-First Ansatz wird zunächst ein Modell aus einer bestehenden Datenbank generiert. Das Modell kann im Entity Framework Designer in einer EMDX-Datei gespeichert, angezeigt und bearbeitet werden. Beim Database-First Ansatz wird zunächst ein Modell aus einer bestehenden Datenbank generiert. Das Modell kann im Entity Framework Designer in einer EMDX-Datei gespeichert, angezeigt und bearbeitet werden.

Model-First

Beim Entity Framework Model-First Ansatz wird mit dem Entity Framework Designer ein Modell erstellt um anschließend ein Datenbankschema aus dem Modell zu generieren. Das Modell kann im Entity Framework Designer in einer EMDX-Datei gespeichert, angezeigt und bearbeitet werden.

Code-First

Beim Code First Ansatz werden Klassen und eine Verbindungszeichenfolge (connection string) erstellt, wodurch das Entity Framework automatisch eine Datenbank erstellen kann. Alle zukünftigen Änderungen und Erweiterungen an der Datenbank werden im Code vorgenommen. Code First Migrations bieten eine Möglichkeit das Datenbankschema einer Anwendung weiterzuentwickeln. Durch die Generierung von Migrations, können Änderungen am EF-Modell nachverfolgt und aktualisiert werden. Dieser Ansatz sehr hilfreich, wenn zu Projektbeginn noch nicht klar ist, wie die Datenbank später aussehen soll.

Entity Framework Core

Entity Framework Core ist eine Bibliothek, die aus der Anwendung heraus den Zugriff auf die Datenbank gewährt. Es wird als objektrelationaler Mapper (ORM) eingesetzt, um die Zuordnung zwischen relationaler Datenbank und dem Datenbankmodell der Anwendung zu gewährleisten. .NET Entwickler können somit unter Verwendung von .NET Objekten mit Datenbanken arbeiten und ersparen sich auf diese Weise einen Großteil des üblicherweise geschrieben Codes.
EF Core ist eine plattformübergreifende, erweiterbare Open Source Version der Entity-Framework Bibliothek.

Entity Framework Migrations

Mit Hilfe von Migrations können Datenbanken aktualisiert werden. Durch einen Zeitstempel im Dateinamen der Migrations sind diese chronologisch angeordnet, wodurch eine inkrementelle Aktualisierung des Datenbankschemas möglich ist. Somit kann das Datenbankmodell synchron gehalten werden, ohne Verlust bestehender Daten.

ASP.NET Core Web API

Der erste Schritt ist das Erstellen eines neuen Projekts in Visual Studio.

Durch das Ändern der Authentifizierung zu „Einzelne Benutzerkonten“ werden alle benötigten Entity Framework Pakete geladen.

Die Projektmappe sollte nun folgendermaßen aussehen:

Jede Migration enthält die Vorgänge, die zum Durchführen bzw. rückgängig machen der Migration erforderlich sind. Eine Up() und eine Down() Methode

Generieren und Ausführen von Migrations

Die Package-Manager-Console (Paket-Manager-Konsole) rufen Sie über Tools / Library Package Manager / Package Manager Console (Extras / NuGet-Paket Manager / Paket-Manager-Konsole) auf.

Neue Migration hinzufügen

Package Manager Console

Add-Migration <name of migration>

CLI

dotnet ef migrations add <name of migration>

Migration entfernen

Package-Manager-Console

Remove-Migration

CLI

dotnet ef migrations remove

Datenbank aktualisieren

Die folgenden Befehle rufen die Up() Methoden der bis zu diesem Zeitpunkt erstellten Migrations auf und übernehmen alle Änderungen in die Datenbank

Package Manager Console

Update-Database

CLI

dotnet ef database update

Stand einer vorherigen Migration wiederherstellen

Möchten Sie den Stand einer vorherigen Migration wiederherstellen, fügen Sie den Namen der gewünschten Migration zur update-Methode hinzu. Die Migrations, die nach der "Zielmigration" ausgeführt wurden werden nicht gelöscht, lediglich die Down() Methoden werden durchgeführt. Um eine Migration endgültig zu löschen, benötigen Sie die remove-Methode.

Package-Manager-Console

Update-Database <name of migration>

CLI

dotnet ef database update <name of migration> 

SQL Script generieren

Die folgenden Befehle generieren ein SQL-Script. Durch die Angabe einer -from und einer -to Migration kann eine Reichweite definiert werden. Des Weiteren kann ein idempotent-Script generiert werden, welche nur Migrations anwendet, die noch nicht für die Datenbank ausgeführt wurden.

Package-Manager-Console

Script-Migration
Script-Migration -Idempotent

CLI

dotnet ef migrations script