C# Academy · Oppitunti

Migraatiot ja skeeman hallinta

Luokaa, ottakaa käyttöön ja palauttakaa migraatioita, jotta voitte kehittää tietokannan skeemaa turvallisesti.

Oppitunti 2/413 vaihetta

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 model

Migraatiotiedoston 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 InitialCreate

Migraation 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 SeedCategories

Mukautettu 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.sql

Kä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.sql

Pikatarkistus

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) ja Down()-metodi (palautus)
  • dotnet ef database update ottaa 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
Aloita maksutta

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

  1. DbContextin ja DbSetin perusteet
  2. Migraatiot ja skeeman hallinta
  3. CRUD-toiminnot EF Corella
  4. Suhteet: yksi moneen ja moni moneen
← Takaisin: C# Academy