Delen via


Migrations Overview

In echte projecten veranderen gegevensmodellen naarmate functies worden geïmplementeerd: nieuwe entiteiten of eigenschappen worden toegevoegd en verwijderd, en databaseschema's moeten dienovereenkomstig worden gewijzigd om gesynchroniseerd te blijven met de toepassing. De functie voor migraties in EF Core biedt een manier om het databaseschema incrementeel bij te werken om dit synchroon te houden met het gegevensmodel van de toepassing, terwijl bestaande gegevens in de database behouden blijven.

Op hoog niveau werken migraties op de volgende manier:

  • Wanneer een gegevensmodelwijziging wordt geïntroduceerd, gebruikt de ontwikkelaar EF Core-hulpprogramma's om een bijbehorende migratie toe te voegen waarin de updates worden beschreven die nodig zijn om het databaseschema synchroon te houden. EF Core vergelijkt het huidige model met een momentopname van het oude model om de verschillen te bepalen en genereert migratiebronbestanden; de bestanden kunnen worden bijgehouden in het broncodebeheer van uw project, net als elk ander bronbestand.
  • Zodra een nieuwe migratie is gegenereerd, kan deze op verschillende manieren worden toegepast op een database. EF Core registreert alle toegepaste migraties in een speciale geschiedenistabel, zodat deze weet welke migraties zijn toegepast en welke niet.

De rest van deze pagina is een stapsgewijze handleiding voor beginners voor het gebruik van migraties. Raadpleeg de andere pagina's in deze sectie voor meer gedetailleerde informatie.

Getting started

Stel dat u zojuist uw eerste EF Core-toepassing hebt voltooid, die het volgende eenvoudige model bevat:

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

Tijdens de ontwikkeling hebt u mogelijk de API's voor maken en neerzetten gebruikt om snel uw model te herhalen, zodat u het model indien nodig kunt wijzigen; Maar nu uw toepassing naar productie gaat, hebt u een manier nodig om het schema veilig te ontwikkelen zonder de hele database te verwijderen.

De hulpprogramma's installeren

Eerst moet u de EF Core-opdrachtregelprogramma's installeren:

Uw eerste migratie maken

U bent nu klaar om uw eerste migratie toe te voegen. Instrueer EF Core om een migratie met de naam InitialCreate te maken:

dotnet ef migrations add InitialCreate

EF Core maakt een map met de naam Migraties in uw project en genereert enkele bestanden. Het is een goed idee om te controleren wat er precies door EF Core is gegenereerd - en mogelijk te wijzigen - maar we zullen dat voorlopig overslaan.

Uw database en schema maken

Op dit moment kunt u ef uw database laten maken en uw schema maken op basis van de migratie. Dit kan via het volgende:

dotnet ef database update

Dat is alles wat er is: uw toepassing is klaar om te worden uitgevoerd op uw nieuwe database en u hoeft geen enkele regel SQL te schrijven. Deze manier om migraties toe te passen is ideaal voor lokale ontwikkeling, maar is minder geschikt voor productieomgevingen. Zie de pagina Migraties toepassen voor meer informatie.

Uw model ontwikkelen

Een paar dagen zijn verstreken en u wordt gevraagd een tijdstempel voor het maken van uw blogs toe te voegen. U hebt de benodigde wijzigingen in uw toepassing uitgevoerd en uw model ziet er nu als volgt uit:

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

Uw model en uw productiedatabase zijn nu niet gesynchroniseerd. We moeten een nieuwe kolom toevoegen aan uw databaseschema. Laten we hiervoor een nieuwe migratie maken:

dotnet ef migrations add AddBlogCreatedTimestamp

Houd er rekening mee dat we migraties een beschrijvende naam geven, zodat u de projectgeschiedenis later gemakkelijker kunt begrijpen.

Omdat dit niet de eerste migratie van het project is, vergelijkt EF Core uw bijgewerkte model nu met een momentopname van het oude model, voordat de kolom werd toegevoegd; de momentopname van het model is een van de bestanden die door EF Core worden gegenereerd wanneer u een migratie toevoegt en wordt ingecheckt bij broncodebeheer. Op basis van die vergelijking detecteert EF Core dat er een kolom is toegevoegd en wordt de juiste migratie toegevoegd.

U kunt nu uw migratie toepassen zoals voorheen:

dotnet ef database update

Houd er rekening mee dat EF deze keer detecteert dat de database al bestaat. Bovendien, toen onze eerste migratie hierboven werd toegepast, werd dit feit vastgelegd in een speciale migratiegeschiedenistabel in uw database; Hierdoor kan EF automatisch alleen de nieuwe migratie toepassen.

Delen van uw model uitsluiten

Soms wilt u mogelijk verwijzen naar typen uit een andere DbContext. Dit kan leiden tot migratieconflicten. Om dit te voorkomen, sluit u het type uit van de migraties van een van de DbContexts.

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

Next steps

Het bovenstaande was slechts een korte inleiding tot migraties. Raadpleeg de andere documentatiepagina's voor meer informatie over het beheren van migraties, het toepassen ervan en andere aspecten. De naslaginformatie over het .NET CLI-hulpprogramma bevat ook nuttige informatie over de verschillende opdrachten

Additional resources