Migreringer og skjemahåndtering
Opprett, bruk og rull tilbake migreringer for å videreutvikle databaseskjemaet på en trygg måte.
Migreringer og skjemahåndtering er en gratis leksjon i C# Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C# Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C# Academy inneholder totalt 4 leksjoner.
Hva er EF Core-migreringer
Migreringer er kodegenererte filer som beskriver trinnvise endringer i databaseskjemaet. I stedet for å skrive DDL-SQL manuelt genererer og bruker EF Core endringene automatisk, slik at koden og databasen holdes synkronisert.
Installere EF Core-verktøy
EF Core CLI-verktøyet (dotnet-ef) må installeres globalt (eller som et lokalt verktøy) for å kjøre migreringskommandoer fra terminalen.
# 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.)Opprette den første migreringen
dotnet ef migrations add sammenligner den gjeldende modellen med det siste øyeblikksbildet og genererer en migreringsfil med metodene Up() (bruk endringer) og Down() (rull tilbake).
# 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 modelInne i en migreringsfil
Hver migrering har en Up-metode (bruker endringer) og en Down-metode (tilbakestiller dem). EF Core genererer disse automatisk ut fra forskjeller i modellen.
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");
}
}Bruke migreringer
dotnet ef database update bruker alle ventende migreringer. EF Core sporer hvilke migreringer som er kjørt, i tabellen __EFMigrationsHistory.
# 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 InitialCreateProgrammatisk migrering ved oppstart
I produksjon kan De bruke migreringer programmatisk ved oppstart, slik at databasen alltid er oppdatert uten manuelle CLI-trinn.
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();Legge til en kolonne i en ny migrering
Legg til en egenskap i entiteten, og opprett deretter en ny migrering. EF Core oppdager endringen og genererer en AddColumn-operasjon.
// 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);Initialisering av data i migreringer
Bruk HasData i OnModelCreating for å legge inn referansedata. EF Core inkluderer dette i migreringens Up-metode som INSERT-setninger.
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 SeedCategoriesEgendefinert SQL i migreringer
Når De trenger DDL som EF Core ikke kan generere automatisk (utløsere, visninger, lagrede prosedyrer), kan De bruke 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");
}Fjerne en migrering
Hvis en migrering ennå ikke er brukt, kan De slette den med dotnet ef migrations remove. Bare den siste migreringen kan fjernes på denne måten.
# 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.sqlPraktisk eksempel: Migreringsstrategi for CI/CD
I en CI/CD-pipeline bør De generere et migreringsskript og la en DBA gjennomgå det før det brukes i produksjon — kjør aldri MigrateAsync() ukritisk i kritiske produksjonssystemer.
# 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.sqlHurtigsjekk
Hvilken EF Core-tabell sporer hvilke migreringer som allerede er brukt på en database?
Oppsummering: Migreringer og skjemabehandling
Viktigste punkter:
dotnet ef migrations add <Name>genererer filer med trinnvise endringer i databaseskjemaet- Hver migrering har metodene
Up()(bruk endringer) ogDown()(rull tilbake) dotnet ef database updatebruker ventende migreringer- Bruk
MigrateAsync()ved programoppstart for automatiserte utrullinger - Generer idempotente SQL-skript som DBA-en kan gjennomgå i produksjonspipelines
Lær deg C# med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 93
- Leksjoner
- 346
Ofte stilte spørsmål
Er leksjonen «Migreringer og skjemahåndtering» gratis?
Ja – hele teksten i «Migreringer og skjemahåndtering» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av C# Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i C# Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Migreringer og skjemahåndtering»?
Opprett, bruk og rull tilbake migreringer for å videreutvikle databaseskjemaet på en trygg måte. Du øver på C# Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med C# Academy?
Ingen tidligere erfaring er nødvendig. C# Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Migreringer og skjemahåndtering»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne C# Academy-leksjonen?
Ja. Alle C# Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Grunnleggende om DbContext og DbSet
- Migreringer og skjemahåndtering
- CRUD-operasjoner med EF Core
- Relasjoner: én-til-mange og mange-til-mange