0Pricing
C# Academy · Lektion

Migrationen und Schemaverwaltung

Erstellen, wenden Sie an und machen Sie Migrationen rückgängig, um Ihr Datenbankschema sicher weiterzuentwickeln.

Migrationen und Schemaverwaltung ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Was sind EF-Core-Migrationen?

Migrationen sind codegenerierte Dateien, die schrittweise Änderungen am Datenbankschema beschreiben. Statt DDL-SQL von Hand zu schreiben, generiert und wendet EF Core die Änderungen automatisch an und hält so Code und Datenbank synchron.

EF-Core-Tools installieren

Das EF-Core-CLI-Tool (dotnet-ef) muss global oder als lokales Tool installiert werden, damit Sie Migrationsbefehle im Terminal ausführen können.

# Install globally
dotnet tool install --global dotnet-ef

# Verify
dotnet ef --version

# Required NuGet packages in your project:
# Microsoft.EntityFrameworkCore.Design
# Microsoft.EntityFrameworkCore.SqlServer (or Sqlite, etc.)

Ihre erste Migration erstellen

dotnet ef migrations add vergleicht Ihr aktuelles Modell mit dem letzten Snapshot und generiert eine Migrationsdatei mit den Methoden Up() (Anwenden) und Down() (Rollback).

# Create initial migration
dotnet ef migrations add InitialCreate

# Output files created:
# Migrations/20240101_InitialCreate.cs       <- Up/Down
# Migrations/20240101_InitialCreate.Designer.cs
# Migrations/AppDbContextModelSnapshot.cs   <- current model

Aufbau einer Migrationsdatei

Jede Migration enthält eine Up-Methode (wendet Änderungen an) und eine Down-Methode (macht sie rückgängig). EF Core generiert diese Methoden automatisch aus den Modelldifferenzen.

public partial class InitialCreate : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.CreateTable(
            name: "Products",
            columns: table => new
            {
                Id    = table.Column<int>(nullable: false)
                             .Annotation("SqlServer:Identity", "1, 1"),
                Name  = table.Column<string>(maxLength: 200, nullable: false),
                Price = table.Column<decimal>(type: "decimal(18,2)", nullable: false)
            },
            constraints: table => table.PrimaryKey("PK_Products", x => x.Id));
    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.DropTable(name: "Products");
    }
}

Migrationen anwenden

dotnet ef database update wendet alle ausstehenden Migrationen an. EF Core erfasst in der Tabelle __EFMigrationsHistory, welche Migrationen bereits ausgeführt wurden.

# Apply all pending migrations
dotnet ef database update

# Apply up to a specific migration
dotnet ef database update AddProductIndex

# Roll back to a previous migration
dotnet ef database update InitialCreate

Migration beim Start programmatisch anwenden

In der Produktion können Sie Migrationen beim Start programmatisch anwenden, damit die Datenbank ohne manuelle CLI-Schritte immer auf dem aktuellen Stand ist.

var app = builder.Build();

// Apply pending migrations at startup
using (var scope = app.Services.CreateScope())
{
    var db = scope.ServiceProvider.GetRequiredService<AppDbContext>();
    await db.Database.MigrateAsync();
}

app.Run();

Eine Spalte in einer neuen Migration hinzufügen

Fügen Sie Ihrer Entität eine Eigenschaft hinzu und erstellen Sie anschließend eine neue Migration. EF Core erkennt die Änderung und generiert eine AddColumn-Operation.

// 1. Add property to entity
public class Product
{
    public int Id { get; set; }
    public string Name { get; set; } = "";
    public decimal Price { get; set; }
    public string? Description { get; set; } // NEW
}

// 2. Generate migration
// dotnet ef migrations add AddProductDescription

// Generated Up():
migrationBuilder.AddColumn<string>(
    name: "Description",
    table: "Products",
    nullable: true);

Daten in Migrationen vorab einfügen

Verwenden Sie HasData in OnModelCreating, um Referenzdaten vorab einzufügen. EF Core nimmt diese Daten in das Up der Migration als INSERT-Anweisungen auf.

modelBuilder.Entity<Category>().HasData(
    new Category { Id = 1, Name = "Electronics" },
    new Category { Id = 2, Name = "Books" },
    new Category { Id = 3, Name = "Clothing" }
);

// Then regenerate the migration:
// dotnet ef migrations add SeedCategories

Benutzerdefiniertes SQL in Migrationen

Wenn Sie DDL benötigen, das EF Core nicht automatisch generieren kann (Trigger, Sichten, gespeicherte Prozeduren), verwenden Sie migrationBuilder.Sql().

protected override void Up(MigrationBuilder migrationBuilder)
{
    migrationBuilder.Sql(@"
        CREATE VIEW vw_ActiveProducts AS
        SELECT Id, Name, Price
        FROM Products
        WHERE IsActive = 1
    ");
}

protected override void Down(MigrationBuilder migrationBuilder)
{
    migrationBuilder.Sql("DROP VIEW vw_ActiveProducts");
}

Eine Migration entfernen

Wenn Sie eine Migration noch nicht angewendet haben, können Sie sie mit dotnet ef migrations remove löschen. Auf diese Weise kann nur die letzte Migration entfernt werden.

# Remove the last unapplied migration
dotnet ef migrations remove

# List all migrations and their status
dotnet ef migrations list

# Script all migrations to SQL (for DBA review)
dotnet ef migrations script --output deploy.sql

Praxisbeispiel: Migrationsstrategie für CI/CD

Generieren Sie in einer CI/CD-Pipeline ein Migrationsskript und lassen Sie es vor der Anwendung in der Produktion von einer Datenbankadministration prüfen – führen Sie MigrateAsync() niemals blind in kritischen Produktionssystemen aus.

# Generate idempotent script for all pending migrations
dotnet ef migrations script --idempotent --output migrations.sql

# Review migrations.sql, then apply via sqlcmd / psql:
# sqlcmd -S server -d db -i migrations.sql

Schnelltest

Welche EF-Core-Tabelle erfasst, welche Migrationen bereits auf eine Datenbank angewendet wurden?

Zusammenfassung: Migrationen und Schemaverwaltung

Wichtige Erkenntnisse:

  • dotnet ef migrations add <Name> generiert Dateien mit schrittweisen Änderungen am Schema
  • Jede Migration enthält Methoden Up() (Anwenden) und Down() (Rollback)
  • dotnet ef database update wendet ausstehende Migrationen an
  • Verwenden Sie MigrateAsync() beim Anwendungsstart für automatisierte Bereitstellungen
  • Generieren Sie idempotente SQL-Skripte zur Prüfung durch die Datenbankadministration in Produktionspipelines

Häufig gestellte Fragen

Ist die Lektion „Migrationen und Schemaverwaltung“ kostenlos?

Ja — der vollständige Text von „Migrationen und Schemaverwaltung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Migrationen und Schemaverwaltung“?

Erstellen, wenden Sie an und machen Sie Migrationen rückgängig, um Ihr Datenbankschema sicher weiterzuentwickeln. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C# Academy zu starten?

Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Migrationen und Schemaverwaltung“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?

Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Grundlagen von DbContext und DbSet
  2. Migrationen und Schemaverwaltung
  3. CRUD-Operationen mit EF Core
  4. Beziehungen: Eins-zu-viele und Viele-zu-viele
← Zurück zu C# Academy