Omówienie migracji

W projektach w świecie rzeczywistym modele danych zmieniają się w miarę wdrażania funkcji: nowe jednostki lub właściwości są dodawane i usuwane, a schematy bazy danych muszą być odpowiednio zmieniane, aby były zsynchronizowane z aplikacją. Funkcja migracji w programie EF Core umożliwia przyrostowe aktualizowanie schematu bazy danych w celu utrzymania jej synchronizacji z modelem danych aplikacji przy jednoczesnym zachowaniu istniejących danych w bazie danych.

Na wysokim poziomie migracje działają w następujący sposób:

  • Po wprowadzeniu zmiany modelu danych deweloper używa narzędzi programu EF Core do dodania odpowiedniej migracji opisującej aktualizacje niezbędne do utrzymania synchronizacji schematu bazy danych. Program EF Core porównuje bieżący model z migawką starego modelu, aby określić różnice i wygenerować pliki źródłowe migracji. Pliki można śledzić w kontroli kodu źródłowego projektu, tak jak w przypadku każdego innego pliku źródłowego.
  • Po wygenerowaniu nowej migracji można ją zastosować do bazy danych na różne sposoby. Program EF Core rejestruje wszystkie zastosowane migracje w specjalnej tabeli historii, co pozwala poznać, które migracje zostały zastosowane, a które nie.

Pozostała część tej strony to przewodnik krok po kroku dla początkujących dotyczący korzystania z migracji. Aby uzyskać bardziej szczegółowe informacje, zapoznaj się z innymi stronami w tej sekcji.

Wprowadzenie

Załóżmy, że udało Ci się ukończyć pierwszą aplikację EF Core, która zawiera następujący prosty model:

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

Podczas opracowywania być może używano interfejsów API tworzenia i porzucania w celu szybkiego iterowania, co powodowało zmienianie modelu zgodnie z potrzebami. Jednak teraz, gdy aplikacja przejdzie do środowiska produkcyjnego, potrzebny jest sposób na bezpieczne rozwijanie schematu bez porzucania całej bazy danych.

Instalowanie narzędzi

Najpierw należy zainstalować narzędzia wiersza polecenia programu EF Core:

Tworzenie pierwszej migracji

Teraz możesz dodać swoją pierwszą migrację! Wydaj programowi EF Core instrukcję utworzenia migracji o nazwie InitialCreate:

dotnet ef migrations add InitialCreate

Program EF Core utworzy katalog o nazwie Migrations (Migracje) w projekcie i wygeneruje niektóre pliki. Warto sprawdzić, co dokładnie wygenerował program EF Core — i ewentualnie to zmienić — ale na razie to pominiemy.

Tworzenie bazy danych i schematu

Na tym etapie program EF utworzył bazę danych i schemat na podstawie migracji. Można to zrobić przy użyciu następujących elementów:

dotnet ef database update

To wszystko — aplikacja jest gotowa do uruchomienia w nowej bazie danych i nie trzeba pisać ani jednego wiersza kodu SQL. Należy pamiętać, że ten sposób stosowania migracji jest idealny do programowania lokalnego, ale jest mniej odpowiedni dla środowisk produkcyjnych — zobacz stronę Stosowanie migracji, aby uzyskać więcej informacji.

Rozwijanie modelu

Minęło kilka dni i poproszono Cię o dodanie znacznika czasu utworzenia do swoich blogów. Wprowadzono niezbędne zmiany w aplikacji i model wygląda teraz następująco:

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

Model i produkcyjna baza danych nie są teraz zsynchronizowane — musimy dodać nową kolumnę do schematu bazy danych. W tym celu utwórzmy nową migrację:

dotnet ef migrations add AddBlogCreatedTimestamp

Pamiętaj, że nadajemy migracjom opisową nazwę, aby ułatwić późniejsze zrozumienie historii projektu.

Ponieważ nie jest to pierwsza migracja projektu, program EF Core porównuje teraz zaktualizowany model z migawką starego modelu sprzed dodania kolumny. Migawka modelu jest jednym z plików generowanych przez program EF Core podczas dodawania migracji i jest zaewidencjonowana w kontroli kodu źródłowego. Na podstawie tego porównania program EF Core wykrywa, że została dodana kolumna, i dodaje odpowiednią migrację.

Teraz możesz zastosować migrację tak jak poprzednio:

dotnet ef database update

Zwróć uwagę, że tym razem program EF wykrywa, że baza danych już istnieje. Ponadto po zastosowaniu pierwszej migracji powyżej ten fakt został zarejestrowany w specjalnej tabeli historii migracji w bazie danych. Dzięki temu program EF może automatycznie stosować tylko nową migrację.

Wykluczanie części modelu

Czasami możesz chcieć odwoływać się do typów z innego obiektu DbContext. Może to prowadzić do konfliktów migracji. Aby temu zapobiec, wyklucz ten typ z migracji jednego z obiektów DbContexts.

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

Następne kroki

Powyższe było tylko krótkim wprowadzeniem do migracji. Zapoznaj się z innymi stronami dokumentacji, aby dowiedzieć się więcej na temat zarządzania migracjami, stosowania ich i innych aspektów. Dokumentacja narzędzia interfejsu wiersza polecenia platformy .NET Core również zawiera przydatne informacje na temat różnych poleceń

Dodatkowe zasoby