Sdílet prostřednictvím


Migrations Overview

V reálných projektech se datové modely mění při implementaci funkcí: přidají se a odeberou nové entity nebo vlastnosti a databázová schémata se musí odpovídajícím způsobem měnit, aby se s aplikací synchronizovala. Funkce migrace v EF Core poskytuje způsob, jak přírůstkově aktualizovat schéma databáze, aby bylo možné ho udržovat v synchronizaci s datovým modelem aplikace při zachování existujících dat v databázi.

Migrace fungují na vysoké úrovni následujícím způsobem:

  • Když dojde ke změně datového modelu, vývojář pomocí nástrojů EF Core přidá odpovídající migraci popisující aktualizace potřebné k udržování schématu databáze v synchronizaci. EF Core porovná aktuální model se snímkem starého modelu, aby určil rozdíly a vygeneroval zdrojové soubory migrace; soubory je možné sledovat ve správě zdrojového kódu projektu stejně jako jakýkoli jiný zdrojový soubor.
  • Jakmile se vygeneruje nová migrace, můžete ji použít na databázi různými způsoby. EF Core zaznamenává všechny použité migrace ve speciální tabulce historie, což jí umožňuje zjistit, které migrace se použily a které ne.

Zbytek této stránky je podrobný průvodce pro začátečníky pro používání migrací. Podrobnější informace najdete na dalších stránkách této části.

Getting started

Předpokládejme, že jste právě dokončili svou první aplikaci EF Core, která obsahuje následující jednoduchý model:

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

Během vývoje jste možná použili rozhraní API create and drop k rychlé iteraci a změně modelu podle potřeby; ale teď, když vaše aplikace přejde do produkčního prostředí, potřebujete způsob, jak bezpečně vyvíjet schéma bez vyřazení celé databáze.

Instalace nástrojů

Nejprve budete muset nainstalovat nástroje příkazového řádku EF Core:

Vytvoření první migrace

Teď jste připraveni přidat první migraci. Požádejte EF Core o vytvoření migrace s názvem InitialCreate:

dotnet ef migrations add InitialCreate

EF Core vytvoří adresář s názvem Migrace v projektu a vygeneruje některé soubory. Je dobré zkontrolovat, co přesně EF Core vygenerovalo – a možná ho změnit – ale prozatím to přeskočíme.

Vytvoření databáze a schématu

V tuto chvíli můžete vytvořit databázi EF a vytvořit schéma z migrace. Můžete to provést následujícím způsobem:

dotnet ef database update

To je vše, co je k dispozici – vaše aplikace je připravená ke spuštění v nové databázi a nemuseli jste napsat jeden řádek SQL. Všimněte si, že tento způsob použití migrací je ideální pro místní vývoj, ale je méně vhodný pro produkční prostředí – další informace najdete na stránce Použití migrací .

Vývoj modelu

Několik dní uplynulo a budete požádáni o přidání časového razítka vytvoření do blogů. Provedli jste potřebné změny aplikace a váš model teď vypadá takto:

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

Váš model a produkční databáze se teď nesynchronizují – do schématu databáze musíme přidat nový sloupec. Pojďme pro tuto migraci vytvořit novou:

dotnet ef migrations add AddBlogCreatedTimestamp

Všimněte si, že migracím poskytneme popisný název, abychom později usnadnili pochopení historie projektu.

Vzhledem k tomu, že se nejedná o první migraci projektu, EF Core teď porovnává aktualizovaný model se snímkem starého modelu před tím, než byl sloupec přidán; Snímek modelu je jedním ze souborů generovaných ef Core při přidání migrace a je vrácen do správy zdrojového kódu. Na základě takového porovnání EF Core zjistí, že byl přidán sloupec, a přidá příslušnou migraci.

Migraci teď můžete použít jako předtím:

dotnet ef database update

Všimněte si, že ef tentokrát zjistí, že databáze již existuje. Kromě toho, když byla naše první migrace použita výše, tato skutečnost byla zaznamenána ve speciální tabulce historie migrací ve vaší databázi; ef to umožňuje automaticky použít pouze novou migraci.

Vyloučení částí modelu

Někdy můžete chtít odkazovat na typy z jiného DbContext. To může vést ke konfliktům migrace. Chcete-li tomu zabránit, vylučte typ z migrací jednoho z dbContexts.

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

Next steps

Výše uvedené informace byly pouze stručným úvodem k migracím. Další informace o správě migrací, jejich použití a dalších aspektech najdete na dalších stránkách dokumentace. Referenční informace k nástrojům .NET CLI obsahují také užitečné informace o různých příkazech.

Additional resources