Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Lernprogramm beginnen Sie mit der Verwendung des EF Core Migrationsfeatures zum Verwalten von Datenmodelländerungen. In späteren Lernprogrammen fügen Sie weitere Migrationen hinzu, während Sie das Datenmodell ändern.
In diesem Tutorial erfahren Sie:
- Informationen zu Migrationen
- Erstellen Sie eine erste Migration
- Untersuchen Sie die Methoden "Up" und "Down"
- Informationen zum Datenmodell-Schnappschuss
- Migration anwenden
Prerequisites
About migrations
Wenn Sie eine neue Anwendung entwickeln, ändert sich Ihr Datenmodell häufig, und jedes Mal, wenn sich das Modell ändert, wird es nicht mehr mit der Datenbank synchronisiert. Sie haben diese Lernprogramme gestartet, indem Sie das Entity Framework so konfigurieren, dass die Datenbank erstellt wird, wenn sie nicht vorhanden ist. Jedes Mal, wenn Sie das Datenmodell ändern – indem Sie Entitätsklassen hinzufügen, entfernen oder ändern oder Ihre DbContext-Klasse ändern – können Sie die Datenbank löschen, und EF erstellt eine neue, die dem Modell entspricht und sie mit Testdaten zusammenfügt.
Diese Methode zum Synchronisieren der Datenbank mit dem Datenmodell funktioniert gut, bis Sie die Anwendung in der Produktion bereitstellen. Wenn die Anwendung in der Produktion ausgeführt wird, werden in der Regel Daten gespeichert, die Sie behalten möchten, und Sie möchten nicht jedes Mal alles verlieren, wenn Sie eine Änderung vornehmen, z. B. das Hinzufügen einer neuen Spalte. Das EF Core Migrationsfeature löst dieses Problem, indem EF das Datenbankschema aktualisieren kann, anstatt eine neue Datenbank zu erstellen.
Um mit Migrationen zu arbeiten, können Sie die Package Manager Console (PMC) oder die CLI verwenden. In diesen Lernprogrammen wird die Verwendung von CLI-Befehlen veranschaulicht. Informationen zum PMC finden Sie am Ende dieses Lernprogramms.
Ablegen der Datenbank
Installieren Sie Tools als EF Core, und löschen Sie die Datenbank:
dotnet tool install --global dotnet-ef
dotnet ef database drop
Note
Standardmäßig stellt die Architektur der zu installierenden .NET-Binärdateien die derzeit ausgeführte Betriebssystemarchitektur dar. Informationen zum Angeben einer anderen Betriebssystemarchitektur finden Sie unter dotnet tool install, --arch option. Weitere Informationen finden Sie in GitHub-Issue dotnet/AspNetCore.Docs #29262.
Im folgenden Abschnitt wird erläutert, wie CLI-Befehle ausgeführt werden.
Eine anfängliche Migration erstellen
Speichern Sie Ihre Änderungen, und erstellen Sie das Projekt. Öffnen Sie dann ein Befehlsfenster, und navigieren Sie zum Projektordner. Dies ist eine schnelle Möglichkeit:
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie im Kontextmenü " Ordner im Datei-Explorer öffnen " aus.
Geben Sie "cmd" in die Adressleiste ein, und drücken Sie die EINGABETASTE.
Geben Sie den folgenden Befehl in das Befehlsfenster ein:
dotnet ef migrations add InitialCreate
In den vorherigen Befehlen wird die Ausgabe ähnlich wie folgt angezeigt:
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core initialized 'SchoolContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None
Done. To undo this action, use 'ef migrations remove'
Wenn die Fehlermeldung "Kann nicht auf die Datei zugreifen ... ContosoUniversity.dll angezeigt wird, weil sie von einem anderen Prozess verwendet wird", suchen Sie das IIS Express-Symbol in der Windows-Taskleiste, und klicken Sie mit der rechten Maustaste darauf, und klicken Sie dann auf "ContosoUniversity > Stop Site".
Untersuchung der Methoden „Up“ und „Down“
Wenn Sie den migrations add Befehl ausgeführt haben, hat EF den Code generiert, der die Datenbank von Grund auf neu erstellt. Dieser Code befindet sich im Ordner "Migrationen " in der Datei mit dem Namen <timestamp>_InitialCreate.cs. Die Up Methode der InitialCreate Klasse erstellt die Datenbanktabellen, die den Datenmodellentitätssätzen entsprechen, und die Down Methode löscht sie, wie im folgenden Beispiel gezeigt.
public partial class InitialCreate : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Course",
columns: table => new
{
CourseID = table.Column<int>(nullable: false),
Credits = table.Column<int>(nullable: false),
Title = table.Column<string>(nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Course", x => x.CourseID);
});
// Additional code not shown
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "Enrollment");
// Additional code not shown
}
}
Migrationen rufen die Up Methode auf, um die Datenmodelländerungen für eine Migration zu implementieren. Wenn Sie einen Befehl eingeben, um das Update zurückzugeben, ruft Migration die Down Methode auf.
Dieser Code dient der ersten Migration, die beim Eingeben des migrations add InitialCreate Befehls erstellt wurde. Der Parameter "Migrationsname" ("InitialCreate" im Beispiel) wird für den Dateinamen verwendet und kann beliebig sein. Es empfiehlt sich, ein Wort oder einen Ausdruck auszuwählen, der zusammenfasst, was in der Migration geschieht. Sie können z. B. eine spätere Migration "AddDepartmentTable" nennen.
Wenn Sie die erste Migration erstellt haben, wenn die Datenbank bereits vorhanden ist, wird der Datenbankerstellungscode generiert, muss aber nicht ausgeführt werden, da die Datenbank bereits mit dem Datenmodell übereinstimmt. Wenn Sie die App in einer anderen Umgebung bereitstellen, in der die Datenbank noch nicht vorhanden ist, wird dieser Code ausgeführt, um Ihre Datenbank zu erstellen. Daher ist es ratsam, sie zuerst zu testen. Aus diesem Grund haben Sie die Datenbank zuvor gelöscht, damit Migrationen eine neue von Grund auf neu erstellen können.
Momentaufnahme des Datenmodells
Migrationen erstellen eine Momentaufnahme des aktuellen Datenbankschemas in Migrations/SchoolContextModelSnapshot.cs. Wenn Sie eine Migration hinzufügen, bestimmt EF, was sich geändert hat, indem das Datenmodell mit der Momentaufnahmedatei verglichen wird.
Verwenden Sie den Befehl zum Entfernen von dotnet ef-Migrationen , um eine Migration zu entfernen.
dotnet ef migrations remove löscht die Migration und stellt sicher, dass die Momentaufnahme ordnungsgemäß zurückgesetzt wird. Wenn dotnet ef migrations remove ausfällt, sollten Sie dotnet ef migrations remove -v verwenden, um weitere Informationen zum Fehler zu erhalten.
Weitere Informationen dazu, wie die Momentaufnahmedatei verwendet wird, finden Sie unterEF Core "Migrationen in Teamumgebungen".
Migration anwenden
Geben Sie im Befehlsfenster den folgenden Befehl ein, um die Datenbank und Tabellen darin zu erstellen.
dotnet ef database update
Die Ausgabe des Befehls ähnelt dem migrations add Befehl, mit der Ausnahme, dass Protokolle für die SQL-Befehle angezeigt werden, die die Datenbank einrichten. Die meisten Protokolle werden in der folgenden Beispielausgabe nicht angegeben. Wenn Sie diese Detailebene in Protokollnachrichten lieber nicht sehen möchten, können Sie die Protokollebene in der appsettings.Development.json Datei ändern. Weitere Informationen finden Sie unter Protokollierung in .NET und ASP.NET Core.
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core initialized 'SchoolContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (274ms) [Parameters=[], CommandType='Text', CommandTimeout='60']
CREATE DATABASE [ContosoUniversity2];
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (60ms) [Parameters=[], CommandType='Text', CommandTimeout='60']
IF SERVERPROPERTY('EngineEdition') <> 5
BEGIN
ALTER DATABASE [ContosoUniversity2] SET READ_COMMITTED_SNAPSHOT ON;
END;
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (15ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE [__EFMigrationsHistory] (
[MigrationId] nvarchar(150) NOT NULL,
[ProductVersion] nvarchar(32) NOT NULL,
CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId])
);
<logs omitted for brevity>
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (3ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20190327172701_InitialCreate', N'5.0-rtm');
Done.
Verwenden Sie den SQL Server-Objekt-Explorer , um die Datenbank wie im ersten Lernprogramm zu überprüfen. Sie werden feststellen, dass eine __EFMigrationsHistory Tabelle hinzugekommen ist, die nachverfolgt, welche Migrationen auf die Datenbank angewendet wurden. Zeigen Sie die Daten in dieser Tabelle an, und Sie sehen eine Zeile für die erste Migration. (Das letzte Protokoll im vorherigen CLI-Ausgabebeispiel zeigt die INSERT-Anweisung, die diese Zeile erstellt.)
Führen Sie die Anwendung aus, um zu überprüfen, ob alles wie zuvor funktioniert.
Cli und PMC vergleichen
Das EF-Tool zum Verwalten von Migrationen ist über .NET CLI-Befehle oder über PowerShell-Cmdlets im Fenster Visual Studio Package Manager Console (PMC) verfügbar. In diesem Lernprogramm wird gezeigt, wie Sie die CLI verwenden, aber sie können bei Bedarf das PMC verwenden.
Die EF-Befehle für die PMC-Befehle befinden sich im Microsoft.EntityFrameworkCore.Tools-Paket . Dieses Paket ist im Microsoft.AspNetCore.App Metapaket enthalten, sodass Sie keinen Paketverweis hinzufügen müssen, wenn Ihre App über einen Paketverweis verfügt Microsoft.AspNetCore.App.
Wichtig: Dies ist nicht dasselbe Paket wie das Paket, das Sie für die CLI installieren, indem Sie die .csproj Datei bearbeiten. Der Name dieses Pakets endet auf Tools, im Gegensatz zum CLI-Paketnamen, der auf Tools.DotNet endet.
Weitere Informationen zu den CLI-Befehlen finden Sie unter .NET CLI.
Weitere Informationen zu den PMC-Befehlen finden Sie unter Package Manager Console (Visual Studio).For more information about the PMC commands, see Package Manager Console (Visual Studio).
Code abrufen
Laden Sie die fertige Anwendung herunter, oder zeigen Sie sie an.
Next step
Wechseln Sie zum nächsten Lernprogramm, um erweiterte Themen zum Erweitern des Datenmodells zu betrachten. Auf diesem Weg werden Sie zusätzliche Migrationen erstellen und anwenden.