EF Core: migrări (dotnet ef migrations) în C# (.NET)

Ecosistem .NET: DI, EF Core și teste EF Core 1.0 (exemple: EF Core 10)

Migrările țin schema bazei de date în pas cu modelul C#: migrations add generează codul schimbării, database update o aplică.

Sintaxă C#
dotnet ef migrations add NumeMigrare   dotnet ef database update   dotnet ef migrations remove

Ce face EF Core: migrări (dotnet ef migrations)

Când adaugi o clasă sau o proprietate în model, baza de date trebuie actualizată. dotnet ef migrations add Nume compară modelul actual cu instantaneul salvat la migrarea anterioară și generează în dosarul Migrations o clasă cu metodele Up (aplică schimbarea) și Down (o anulează), plus fișierul <Context>ModelSnapshot.cs. Fișierele se păstrează în controlul versiunilor.

dotnet ef database update aplică migrările care lipsesc și le notează în tabelul __EFMigrationsHistory; cu un nume de migrare, aduce baza exact la acel punct (și înapoi). migrations remove șterge ultima migrare dacă nu a fost aplicată, iar migrations script generează SQL-ul pentru a fi verificat și rulat de un administrator.

Uneltele se instalează o dată cu dotnet tool install --global dotnet-ef, iar proiectul are nevoie de pachetul Microsoft.EntityFrameworkCore.Design. Pentru producție, documentația EF recomandă scripturi SQL sau migration bundles (dotnet ef migrations bundle), nu database update rulat de pe calculatorul dezvoltatorului.

Parametri

Parametru Descriere
migrations add &lt;nume&gt; Creează o migrare nouă. Folosește nume descriptive: AdaugaStocProdus.
database update [&lt;migrare&gt;] Aplică migrările; cu nume, merge la acea migrare (inclusiv înapoi).
migrations list Afișează migrările și pe cele neaplicate ((Pending)).
migrations script [de la] [până la] Generează SQL. Cu --idempotent scriptul verifică ce e deja aplicat.
migrations remove Șterge ultima migrare neaplicată.

Exemple

Exemplul 1: Prima migrare și crearea bazei

dotnet tool install --global dotnet-ef
dotnet package add Microsoft.EntityFrameworkCore.Design
dotnet ef migrations add InitialCreate
dotnet ef database update

Ieșire în terminal (exemplu)

You can invoke the tool using the following command: dotnet-ef
Tool 'dotnet-ef' (version '10.0.0') was successfully installed.
...
Build started...
Build succeeded.
Done. To undo this action, use 'ef migrations remove'
Build started...
Build succeeded.
Applying migration '20261025093000_InitialCreate'.
Done.

Exemplul 2: O coloană nouă: codul generat de migrare

După ce adaugi public int Stoc { get; set; } în clasa Produs și rulezi dotnet ef migrations add AdaugaStoc, EF generează o clasă asemănătoare (pentru SQLite).

public partial class AdaugaStoc : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.AddColumn<int>(
            name: "Stoc",
            table: "Produse",
            type: "INTEGER",
            nullable: false,
            defaultValue: 0);
    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.DropColumn(
            name: "Stoc",
            table: "Produse");
    }
}

Greșeli frecvente

  • Modificarea manuală a unei migrări deja aplicate în altă bază de date: istoricul nu se mai potrivește. Creează o migrare nouă.
  • Ștergerea fișierului ModelSnapshot: următoarea migrare va încerca să creeze din nou toate tabelele.
  • Redenumirea unei proprietăți poate fi văzută ca ștergere plus adăugare de coloană, cu pierdere de date. Verifică metoda Up și înlocuiește cu RenameColumn dacă e cazul.

Comenzi înrudite