Udostępnij za pośrednictwem


Port z EF6 do EF Core — baza danych jako źródło prawdy

Jeśli używasz bazy danych jako źródła prawdy, uaktualnienie będzie dotyczyć głównie wszelkich zmian w kształcie wygenerowanych jednostek. Kroki migracji obejmują:

  1. Wybierz punkt w czasie, aby modelować bazę danych.
  2. Upewnij się, że projekty EF6 są aktualne i zsynchronizowane z bazą danych.
  3. Utwórz projekt EF Core.
  4. Użyj narzędzi do tworzenia szkieletów, aby odtworzyć bazę danych w kodzie.
  5. Sprawdź, czy klasy wygenerowane przez program EF Core są zgodne z kodem.
  6. W przypadku wyjątków zmodyfikuj wygenerowane klasy i zaktualizuj konfigurację modelu lub dostosuj kod do modelu.

Należy pamiętać, że chociaż program EF Core obecnie tworzy szkielet wszystkich elementów potrzebnych do pomyślnego wygenerowania kopii bazy danych, większość kodu nie jest potrzebna w przypadku podejścia opartego na bazie danych. Poprawka tego problemu jest śledzona w temacie Problem nr 10890. Elementy, które można bezpiecznie zignorować w razie potrzeby, obejmują: sekwencje, nazwy ograniczeń, indeksy inne niż unikatowe i filtry indeksów.

Obsługa zmian schematu

Gdy baza danych jest źródłem prawdy, program EF Core pobiera informacje o schemacie z bazy danych, a nie wypycha je za pośrednictwem migracji. Typowy przepływ pracy polega na ponownym uruchomieniu kroku inżynierii odwrotnej za każdym razem, gdy schemat bazy danych ulegnie zmianie. Kompleksowy zestaw testów jest przydatny w tym podejściu, ponieważ można zautomatyzować proces tworzenia szkieletu i zweryfikować zmiany, uruchamiając testy.

Wskazówki do obsługi różnic w modelu

Z różnych powodów możesz chcieć, aby model domeny języka C# był kształtowany inaczej niż model domeny wygenerowany w inżynierii odwrotnej. W wielu przypadkach oznacza to ręczne aktualizowanie kodu generowanego automatycznie po każdej zmianie schematu. Jednym ze sposobów zapobiegania dodatkowemu nakładowi pracy podczas ponownego generowania kodu jest użycie klas częściowych dla jednostek DbContext i powiązanych. Następnie można zachować kod związany z logiką biznesową i właściwościami, które nie są śledzone w bazie danych w osobnym zestawie plików klas, które nie zostaną zastąpione.

Jeśli model różni się znacznie od wygenerowanego modelu, ale nie zmienia się często, jedną z opcji do rozważenia jest użycie wzorca repozytorium jako karty. Repozytorium może korzystać z wygenerowanych klas programu EF Core i publikować używane klasy niestandardowe. Może to zmniejszyć wpływ zmian, izolując je do kodu repozytorium, zamiast wykonywać refaktoryzację całej aplikacji przy każdym zmianie schematu.

Możesz rozważyć alternatywny przepływ pracy i wykonać kroki podobne do podejścia hybrydowego. Zamiast generować nowy zestaw klas za każdym razem, należy wskazać określone tabele, aby wygenerować tylko nowe klasy. Istniejące klasy są zachowywane jako "as is" i bezpośrednio dodaj lub usuń właściwości, które uległy zmianie. Następnie zaktualizujesz konfigurację modelu, aby rozwiązać wszelkie zmiany w sposobie mapowania bazy danych na istniejące klasy.

Dostosowywanie generowania kodu

Program EF Core 6 obecnie nie obsługuje dostosowywania wygenerowanego kodu. Dostępne są rozwiązania innych firm, takie jak EF Core Power Tools . Listę polecanych narzędzi i rozszerzeń społeczności można znaleźć w temacie: EF Core Tools and Extensions (Narzędzia i rozszerzenia platformy EF Core).

Na koniec przejrzyj szczegółową listę różnic między platformami EF6 i EF Core , aby rozwiązać pozostałe problemy z przenoszeniem.