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:
- Na ogół zalecamy korzystanie z narzędzi interfejsu wiersza polecenia platformy .NET Core, które działają na wszystkich platformach.
- Jeśli wolisz pracować w programie Visual Studio lub masz doświadczenie z migracjami EF6, możesz również użyć narzędzi konsoli menedżera pakietów.
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
- Dokumentacja narzędzi programu Entity Framework Core — interfejs wiersza polecenia platformy .NET Core: obejmuje polecenia do aktualizowania, porzucania, dodawania, usuwania i nie tylko.
- Dokumentacja narzędzi programu Entity Framework Core — konsola menedżera pakietów w programie Visual Studio: obejmuje polecenia do aktualizowania, porzucania, dodawania, usuwania i nie tylko.
- Sesja podsumowania .NET Data Community Standup, w której omówiono nowe funkcje migracji w programie EF Core 5.0.