Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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
- Entity Framework Core-verktygsreferens – .NET CLI : Innehåller kommandon för att uppdatera, släppa, lägga till, ta bort med mera.
- Entity Framework Core-verktygsreferens – Package Manager-konsolen i Visual Studio: Innehåller kommandon för att uppdatera, släppa, lägga till, ta bort med mera.
- .NET Data Community Standup-session går över nya migreringsfunktioner i EF Core 5.0.