Migraatiot ja skeeman hallinta
Luokaa, ottakaa käyttöön ja palauttakaa migraatioita, jotta voitte kehittää tietokannan skeemaa turvallisesti.
Migraatiot ja skeeman hallinta on ilmainen C# Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C# Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C# Academy-kurssilla on yhteensä 4 oppituntia.
Mitä EF Coren migraatiot ovat?
Migraatiot ovat koodigeneroituja tiedostoja, jotka kuvaavat tietokannan skeeman vaiheittaisia muutoksia. Sen sijaan että kirjoittaisitte DDL-SQL:n käsin, EF Core muodostaa ja ottaa sen käyttöön automaattisesti, jolloin koodi ja tietokanta pysyvät synkronissa.
EF Core Tools -työkalujen asentaminen
EF Coren CLI-työkalu (dotnet-ef) on asennettava globaalisti (tai paikallisena työkaluna), jotta migraatiokomentoja voidaan suorittaa päätteessä.
# 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.)Ensimmäisen migraation luominen
dotnet ef migrations add vertaa nykyistä mallia viimeisimpään tilannevedokseen ja luo migraatiotiedoston, joka sisältää Up()-metodin (käyttöönotto) ja Down()-metodin (palautus).
# 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 modelMigraatiotiedoston rakenne
Jokaisella migraatiolla on Up-metodi (ottaa muutokset käyttöön) ja Down-metodi (peruuttaa ne). EF Core luo nämä automaattisesti mallien välisten erojen perusteella.
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");
}
}Migraatioiden käyttöönotto
dotnet ef database update ottaa kaikki odottavat migraatiot käyttöön. EF Core seuraa suoritettuja migraatioita taulussa __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 InitialCreateMigraation suorittaminen ohjelmallisesti käynnistyksen yhteydessä
Tuotannossa voitte ottaa migraatiot käyttöön ohjelmallisesti sovelluksen käynnistyessä, jolloin tietokanta on aina ajan tasalla ilman manuaalisia CLI-vaiheita.
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();Sarakkeen lisääminen uuteen migraatioon
Lisätkää ominaisuus entiteettiin ja luokaa sitten uusi migraatio. EF Core havaitsee muutoksen ja muodostaa AddColumn-operaation.
// 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);Tietojen esitäyttö migraatioissa
Käyttäkää HasData-metodia OnModelCreating-metodissa viitetietojen esitäyttämiseen. EF Core sisällyttää ne migraation Up-metodiin INSERT-lauseina.
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 SeedCategoriesMukautettu SQL migraatioissa
Kun tarvitsette DDL-komentoja, joita EF Core ei pysty muodostamaan automaattisesti (esimerkiksi triggereitä, näkymiä tai tallennettuja proseduurikutsuja), käyttäkää migrationBuilder.Sql()-metodia.
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");
}Migraation poistaminen
Jos ette ole vielä ottaneet migraatiota käyttöön, voitte poistaa sen komennolla dotnet ef migrations remove. Tällä tavalla voidaan poistaa vain viimeisin migraatio.
# 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.sqlKäytännössä: migraatiostrategia CI/CD-putkessa
CI/CD-putkessa luokaa migraatioskripti ja antakaa tietokanta-asiantuntijan tarkistaa se ennen sen käyttöönottoa tuotannossa — älkää koskaan suorittako MigrateAsync()-metodia sokeasti kriittisissä tuotantojärjestelmissä.
# 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.sqlPikatarkistus
Mikä EF Coren taulu seuraa, mitkä migraatiot tietokantaan on jo otettu käyttöön?
Kertaus: migraatiot ja skeeman hallinta
Keskeiset opit:
dotnet ef migrations add <Name>luo tiedostoja skeeman vaiheittaisia muutoksia varten- Jokaisella migraatiolla on
Up()-metodi (käyttöönotto) jaDown()-metodi (palautus) dotnet ef database updateottaa odottavat migraatiot käyttöön- Käyttäkää
MigrateAsync()-metodia sovelluksen käynnistyksessä automaattisia käyttöönottotoimia varten - Luokaa idempotentteja SQL-komentosarjoja tietokanta-asiantuntijan tarkistettavaksi tuotannon putkissa
Opi C# tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 93
- Oppitunnit
- 346
Usein kysytyt kysymykset
Onko oppitunti ”Migraatiot ja skeeman hallinta” ilmainen?
Kyllä – oppitunnin ”Migraatiot ja skeeman hallinta” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C# Academy-kurssin, päivitä CoddyKit PROhon. C# Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Migraatiot ja skeeman hallinta”?
Luokaa, ottakaa käyttöön ja palauttakaa migraatioita, jotta voitte kehittää tietokannan skeemaa turvallisesti. Harjoittelet C# Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C# Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C# Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Migraatiot ja skeeman hallinta”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C# Academy-oppitunnilla?
Kyllä. Jokainen C# Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- DbContextin ja DbSetin perusteet
- Migraatiot ja skeeman hallinta
- CRUD-toiminnot EF Corella
- Suhteet: yksi moneen ja moni moneen