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 <nume> |
Creează o migrare nouă. Folosește nume descriptive: AdaugaStocProdus. |
database update [<migrare>] |
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 cuRenameColumndacă e cazul.
Comenzi înrudite
Entity Framework Core: DbContext și DbSet: DbContext este legătura cu baza de date în EF Core: DbSet<T> reprezintă un tabel, iar SaveChanges salvează adăugările, modificările și ștergerile.EF Core: interogări (Where, Include, AsNoTracking): Interogările LINQ pe DbSet devin SQL: Where, Select, Include pentru relații, AsNoTracking pentru citire și ExecuteUpdate în masă.NuGet: pachete și PackageReference: NuGet este managerul de pachete .NET: adaugi biblioteci cu dotnet package add, iar proiectul le reține ca PackageReference în .csproj.