Udostępnij przez


Przenoszenie danych z EF6 do EF Core

Platforma Entity Framework Core (EF Core) jest w skrócie całkowitą wersją programu Entity Framework dla nowoczesnych architektur aplikacji. Ze względu na podstawowe zmiany nie ma bezpośredniej ścieżki uaktualnienia. Celem tej dokumentacji jest udostępnienie kompleksowego przewodnika dotyczącego przenoszenia aplikacji EF6 do platformy EF Core.

Ważne

Przed rozpoczęciem procesu przenoszenia należy sprawdzić, czy program EF Core spełnia wymagania dotyczące dostępu do danych dla aplikacji. Wszystko, czego potrzebujesz, można znaleźć w dokumentacji platformy EF Core.

Ostrzeżenie

Program EF Core obsługuje tylko nowoczesne platformy .NET i nie obsługuje programu .NET Framework. W związku z tym, jeśli projekt nadal jest przeznaczony dla platformy .NET Framework, musisz przeprowadzić migrację do nowoczesnej platformy .NET, zanim będzie można rozpocząć migrację z platformy EF6 do platformy EF Core. Należy pamiętać, że platforma EF6 obsługuje nowoczesne platformy .NET, dzięki czemu można najpierw przeprowadzić migrację do nowoczesnej platformy .NET przy zachowaniu platformy EF6, a następnie przeprowadzić migrację z platformy EF6 do platformy EF Core.

Powody uaktualnienia

Wszystkie nowe programowanie w programie Entity Framework odbywa się w programie EF Core. Brak planów na przeniesienie nowych funkcji do EF6. Program EF Core działa w najnowszych środowiskach uruchomieniowych platformy .NET i w pełni korzysta ze środowiska uruchomieniowego, specyficznego dla platformy (takiego jak ASP.NET Core lub WPF) i funkcji specyficznych dla języka. Oto kilka korzyści uzyskanych z uaktualniania:

  • Korzystaj z bieżących ulepszeń wydajności w programie EF Core. Na przykład jeden klient, który przeprowadził migrację z platformy EF6 do EF Core 6, odnotował 40-krotne zmniejszenie obciążenia spowodowanego ciężkim zapytaniem dzięki funkcji dzielenia zapytań. Wielu klientów zgłasza ogromne wzrosty wydajności, przechodząc do najnowszej wersji platformy EF Core.
  • Korzystanie z nowych funkcji w programie EF Core. Brak nowych funkcji dodanych do platformy EF6. Wszystkie nowe funkcje, na przykład dostawca usługi Azure Cosmos DB i DbContextFactory, zostaną dodane tylko do platformy EF Core. Aby zapoznać się z pełnym porównaniem platformy EF6 z platformą EF Core, w tym kilkoma funkcjami wyłącznymi na platformę EF Core, zobacz: Porównanie platformy EF Core i EF6.
  • Modernizuj stos aplikacji przy użyciu wstrzykiwania zależności i bezproblemowo integruj dostęp do danych z technologiami takimi jak gRPC i GraphQL.

Uwaga dotycząca migracji

W tej dokumentacji użyto terminów port i uaktualnienie, aby uniknąć pomyłek z funkcją migracji jako elementem programu EF Core. Migracje w programie EF Core nie są zgodne z migracjami EF6 Code First z powodu znaczących ulepszeń sposobu obsługi migracji. Nie ma zalecanego podejścia do przenoszenia historii migracji, więc zaplanuj rozpoczęcie od nowa w EF Core. Bazę kodu i dane można obsługiwać z migracji ef6. Zastosuj ostateczną migrację w programie EF6, a następnie utwórz początkową migrację w programie EF Core. Będzie można śledzić historię w programie EF Core w przyszłości.

Kroki uaktualniania

Ścieżka uaktualnienia została podzielona na kilka dokumentów uporządkowanych według fazy uaktualnienia i typu aplikacji.

Określanie "smaku" platformy EF Core

Istnieje kilka metod współpracy platformy EF Core z modelem domeny i implementacją bazy danych. Ogólnie rzecz biorąc, większość aplikacji będzie postępować zgodnie z jednym z tych wzorców i sposób podejścia do portu będzie zależeć od "smaku" aplikacji.

Kod jako źródło prawdy jest podejściem, w którym wszystko jest modelowane za pomocą kodu i klas, niezależnie od tego, czy za pośrednictwem atrybutów danych, płynnej konfiguracji lub kombinacji obu tych elementów. Baza danych jest początkowo generowana na podstawie modelu zdefiniowanego w programie EF Core, a dalsze aktualizacje są zwykle obsługiwane za pośrednictwem migracji. Jest to często nazywane "code first", ale nazwa nie jest całkowicie dokładna, ponieważ jednym z podejść jest rozpoczęcie od istniejącej bazy danych, generowanie jednostek, a następnie kontynuowanie z użyciem kodu.

Podejście "Baza danych jako źródło prawdy" polega na odwrotnej inżynierii lub generowaniu szkieletu kodu na podstawie struktury bazy danych. Po wprowadzeniu zmian schematu kod jest ponownie wygenerowany lub zaktualizowany w celu odzwierciedlenia zmian. Jest to często nazywane "najpierw bazą danych".

Na koniec bardziej zaawansowane podejście do mapowania hybrydowego jest zgodne z filozofią, że kod i baza danych są zarządzane oddzielnie, a program EF Core jest używany do mapowania między nimi. Takie podejście zwykle unika migracji.

Poniższa tabela zawiera podsumowanie niektórych różnic wysokiego poziomu:

Podejście Rola dewelopera Rola DBA Migracje Rusztowanie Repo
Najpierw kod Projektowanie jednostek i weryfikowanie/dostosowywanie wygenerowanych migracji Weryfikowanie definicji schematu i zmian Na zatwierdzenie N/A Śledzenie jednostek, dbContext i migracji
Najpierw baza danych Odwrotne inżynierowanie po wprowadzeniu zmian oraz zweryfikowaniu wygenerowanych jednostek. Poinformuj deweloperów o zmianach w bazie danych, aby ponownie utworzyć szkielet. N/A W zależności od zmiany schematu Śledzenie rozszerzeń/klas częściowych, które rozszerzają wygenerowane jednostki
Hybryda Aktualizowanie płynnej konfiguracji do mapowania za każdym razem, gdy jednostki lub baza danych zmieniają się Poinformuj deweloperów o zmianie bazy danych, aby mogli aktualizować jednostki i konfigurację modelu N/A N/A Śledzenie jednostek i elementu DbContext

Podejście hybrydowe to bardziej zaawansowane podejście z dodatkowym obciążeniem w porównaniu z tradycyjnymi metodami kodu i bazy danych.

Zrozumieć wpływ odejścia od EDMX

Program EF6 obsługiwał specjalny format definicji modelu o nazwie Entity Data Model XML (EDMX). Pliki EDMX zawierają wiele definicji, w tym definicje schematu koncepcyjnego (CSDL), specyfikacje mapowania (MSL) i przechowują definicje schematu (SSDL). Program EF Core śledzi schematy domeny, mapowania i bazy danych za pomocą grafów modelu wewnętrznego i nie obsługuje formatu EDMX. Wiele wpisów w blogu i artykułów omyłkowo stwierdza to, że platforma EF Core obsługuje tylko "kod pierwszy". Program EF Core obsługuje wszystkie trzy modele aplikacji opisane w poprzedniej sekcji. Model można ponownie skompilować w programie EF Core, odwracając inżynierię bazy danych. Jeśli używasz programu EDMX do wizualnej reprezentacji modelu jednostki, rozważ użycie narzędzi EF Core Power Tools typu open source, które zapewniają podobne możliwości dla programu EF Core.

Aby uzyskać więcej informacji na temat wpływu braku obsługi plików EDMX, przeczytaj przewodnik dotyczący przenoszenia EDMX.

Wykonaj kroki uaktualniania

Nie jest wymagane przenoszenie całej aplikacji. Programy EF6 i EF Core mogą działać w tej samej aplikacji (zobacz: korzystanie z platform EF Core i EF6 w tej samej aplikacji). Aby zminimalizować ryzyko, możesz rozważyć następujące kwestie:

  1. Przejdź do platformy EF6 na platformie .NET Core, jeśli jeszcze tego nie zrobiono.
  2. Przeprowadź migrację małej części aplikacji do platformy EF Core i uruchom ją równolegle z platformą EF6.
  3. Ostatecznie przełącz resztę bazy kodu na platformę EF Core i wycofaj kod EF6.

Jeśli chodzi o sam port, w ujęciu ogólnym, będziesz:

  1. Przejrzyj zmiany zachowania między programem EF6 i programem EF Core.
  2. Przeprowadź ostateczne migracje, jeśli istnieją, w programie EF6.
  3. Utwórz projekt platformy EF Core.
  4. Skopiuj kod do nowego projektu, uruchom inżynierię odwrotną lub kombinację obu tych elementów.
  5. Zmień nazwy odniesień i obiektów oraz zmień zachowania.
    • System.Data.Entity do Microsoft.EntityFrameworkCore
    • Zmiana DbContext konstruktora w celu korzystania z opcji i/lub zastąpienia OnConfiguring
    • DbModelBuilder do ModelBuilder
    • Zmień nazwę DbEntityEntry<T> na EntityEntry<T>
    • Przechodzenie z Database.Log do Microsoft.Extensions.Logging (zaawansowanych) lub DbContextOptionsBuilder.LogTo (prostych) interfejsów API
    • Wprowadź zmiany dla WithRequired i WithOptional (zobacz tutaj)
    • Zaktualizuj kod weryfikacji. Nie ma wbudowanej weryfikacji danych w programie EF Core, ale możesz to zrobić samodzielnie.
    • Wykonaj wszelkie niezbędne kroki, aby przenieść z EDMX.
  6. Wykonaj określone kroki na podstawie podejścia EF Core:

Istnieje wiele zagadnień związanych ze wszystkimi podejściami, więc warto również przejrzeć sposoby rozwiązywania problemów ze szczegółowymi różnicami między platformami EF6 i EF Core.