Migrationer og skemahåndtering
Opret, anvend og rul migrationer tilbage for at udvikle databaseskemaet sikkert.
Migrationer og skemahåndtering er en gratis C# Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i C# Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C# Academy-kurset indeholder 4 lektioner i alt.
Hvad er EF Core-migreringer?
Migreringer er kodegenererede filer, der beskriver trinvise ændringer af databaseskemaet. I stedet for at skrive DDL-SQL i hånden genererer og anvender EF Core det automatisk, så kode og database holdes synkroniseret.
Installation af EF Core-værktøjer
EF Core CLI-værktøjet (dotnet-ef) skal installeres globalt (eller som et lokalt værktøj), så du kan kø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.)Oprettelse af din første migrering
dotnet ef migrations add sammenligner din aktuelle model med det seneste modeløjebliksbillede og genererer en migreringsfil med metoderne Up() (anvend) og Down() (tilbagefør).
# 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 modelIndholdet af en migreringsfil
Hver migrering har en Up-metode (anvender ændringer) og en Down-metode (tilbagefører dem). EF Core genererer disse automatisk ud fra forskelle 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");
}
}Anvendelse af migreringer
dotnet ef database update anvender alle ventende migreringer. EF Core holder styr på, hvilke migreringer der er kø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 opstart
I produktion kan du anvende migreringer programmatisk ved opstart, så databasen altid er opdateret uden manuelle CLI-trin.
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();Tilføjelse af en kolonne i en ny migrering
Føj en egenskab til din entitet, og opret derefter en ny migrering. EF Core registrerer ændringen og genererer en AddColumn-handling.
// 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);Datainitialisering i migreringer
Brug HasData i OnModelCreating til at indsætte referencedata. EF Core inkluderer dem i migreringens Up som INSERT-sætninger.
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 SeedCategoriesBrugerdefineret SQL i migreringer
Når du har brug for DDL, som EF Core ikke kan generere automatisk (triggere, visninger eller lagrede procedurer), skal du bruge 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");
}Fjernelse af en migrering
Hvis du endnu ikke har anvendt en migrering, kan du slette den med dotnet ef migrations remove. Kun den seneste migrering kan fjernes på denne måde.
# 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: strategi for CI/CD-migrering
I en CI/CD-proces skal du generere et migreringsskript og lade en databaseadministrator gennemgå det, før det anvendes i produktion — kør aldrig MigrateAsync() ukritisk i kritiske produktionssystemer.
# 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.sqlHurtig kontrol
Hvilken EF Core-tabel registrerer, hvilke migreringer der allerede er anvendt på en database?
Opsamling: migreringer og skemastyring
Vigtigste pointer:
dotnet ef migrations add <Name>genererer filer med trinvise ændringer af skemaet- Hver migrering har metoderne
Up()(anvendelse) ogDown()(tilbageførsel) dotnet ef database updateanvender ventende migreringer- Brug
MigrateAsync()ved appens opstart til automatiserede udrulninger - Generér idempotente SQL-skripter, som databaseadministratorer kan gennemgå i produktionsprocesser
Lær C# med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 93
- Lektioner
- 346
Ofte stillede spørgsmål
Er lektionen “Migrationer og skemahåndtering” gratis?
Ja — hele teksten til “Migrationer og skemahåndtering” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C# Academy-kurset, skal du opgradere til CoddyKit PRO. C# Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Migrationer og skemahåndtering”?
Opret, anvend og rul migrationer tilbage for at udvikle databaseskemaet sikkert. Du øver dig i C# Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på C# Academy?
Der kræves ingen tidligere erfaring. C# Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Migrationer og skemahåndtering”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne C# Academy-lektion?
Ja. Alle C# Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Grundlæggende om DbContext og DbSet
- Migrationer og skemahåndtering
- CRUD-operationer med EF Core
- Relationer: One-to-Many og Many-to-Many