Dela via


Migrations Overview

I verkliga projekt ändras datamodeller när funktioner implementeras: nya entiteter eller egenskaper läggs till och tas bort, och databasscheman måste ändras i enlighet med detta för att hållas synkroniserade med programmet. Migreringsfunktionen i EF Core är ett sätt att stegvis uppdatera databasschemat för att hålla det synkroniserat med programmets datamodell samtidigt som befintliga data bevaras i databasen.

På hög nivå fungerar migreringar på följande sätt:

  • När en datamodelländring introduceras använder utvecklaren EF Core-verktyg för att lägga till en motsvarande migrering som beskriver de uppdateringar som krävs för att hålla databasschemat synkroniserat. EF Core jämför den aktuella modellen med en ögonblicksbild av den gamla modellen för att fastställa skillnaderna och genererar källfiler för migrering. filerna kan spåras i projektets källkontroll som alla andra källfiler.
  • När en ny migrering har genererats kan den tillämpas på en databas på olika sätt. EF Core registrerar alla tillämpade migreringar i en särskild historiktabell, så att den kan veta vilka migreringar som har tillämpats och vilka som inte har gjort det.

Resten av den här sidan är en stegvis nybörjarguide för att använda migreringar. Mer detaljerad information finns på de andra sidorna i det här avsnittet.

Getting started

Anta att du just har slutfört ditt första EF Core-program, som innehåller följande enkla modell:

public class Blog
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Under utvecklingen kan du ha använt API:erna Skapa och släpp för att iterera snabbt och ändra din modell efter behov. men nu när programmet kommer till produktion behöver du ett sätt att utveckla schemat på ett säkert sätt utan att ta bort hela databasen.

Installera verktygen

Först måste du installera EF Core-kommandoradsverktygen:

  • Vi rekommenderar vanligtvis att du använder .NET CLI-verktygen, som fungerar på alla plattformar.
  • Om du är mer bekväm med att arbeta i Visual Studio eller har erfarenhet av EF6-migreringar kan du också använda package manager-konsolverktygen.

Skapa din första migrering

Nu är du redo att lägga till din första migrering! Instruera EF Core att skapa en migrering med namnet InitialCreate:

dotnet ef migrations add InitialCreate

EF Core skapar en katalog med namnet Migrations in your project ( Migreringar i projektet) och genererar vissa filer. Det är en bra idé att inspektera exakt vad EF Core genererade - och eventuellt ändra det - men vi hoppar över det för tillfället.

Skapa din databas och ditt schema

Nu kan du låta EF skapa databasen och skapa schemat från migreringen. Detta kan göras via följande:

dotnet ef database update

Det är allt som finns i det – ditt program är redo att köras på din nya databas och du behövde inte skriva en enda rad SQL. Observera att det här sättet att tillämpa migreringar är idealiskt för lokal utveckling, men är mindre lämpligt för produktionsmiljöer – mer information finns på sidan Tillämpa migreringar .

Utveckla din modell

Några dagar har gått och du uppmanas att lägga till en tidsstämpel för att skapa i dina bloggar. Du har gjort de nödvändiga ändringarna i ditt program och din modell ser nu ut så här:

public class Blog
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime CreatedTimestamp { get; set; }
}

Din modell och din produktionsdatabas är nu osynkroniserade – vi måste lägga till en ny kolumn i databasschemat. Nu ska vi skapa en ny migrering för detta:

dotnet ef migrations add AddBlogCreatedTimestamp

Observera att vi ger migreringar ett beskrivande namn för att göra det lättare att förstå projekthistoriken senare.

Eftersom detta inte är projektets första migrering jämför EF Core nu din uppdaterade modell med en ögonblicksbild av den gamla modellen innan kolumnen lades till. modellögonblicksbilden är en av filerna som genereras av EF Core när du lägger till en migrering och checkas in i källkontrollen. Baserat på den jämförelsen identifierar EF Core att en kolumn har lagts till och lägger till lämplig migrering.

Nu kan du använda migreringen som tidigare:

dotnet ef database update

Observera att EF den här gången identifierar att databasen redan finns. När vår första migrering tillämpades ovan registrerades dessutom det här faktumet i en särskild migreringshistoriktabell i databasen. Detta gör att EF automatiskt endast tillämpar den nya migreringen.

Exkludera delar av din modell

Ibland kanske du vill referera till typer från en annan DbContext. Detta kan leda till migreringskonflikter. För att förhindra detta undantar du typen från migreringarna av en av DbContexts.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<IdentityUser>()
        .ToTable("AspNetUsers", t => t.ExcludeFromMigrations());
}

Next steps

Ovanstående var bara en kort introduktion till migreringar. Läs de andra dokumentationssidorna om du vill veta mer om hur du hanterar migreringar, tillämpar dem och andra aspekter. Referensen för .NET CLI-verktyget innehåller också användbar information om de olika kommandona

Additional resources