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ą:
- Wybierz punkt w czasie, aby modelować bazę danych.
- Upewnij się, że projekty EF6 są aktualne i zsynchronizowane z bazą danych.
- Utwórz projekt platformy EF Core.
- Użyj narzędzi do tworzenia szkieletów , aby odwrócić tworzenie kodu bazy danych.
- Sprawdź, czy wygenerowane klasy ef Core są zgodne z kodem.
- 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ć, jeśli nie są potrzebne, to: 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, zamiast wypychać je za pośrednictwem migracji. Typowy przepływ pracy polega na ponownym uruchomieniu kroku inżynierii odwrotnej przy każdej zmianie schematu bazy danych. Kompleksowy zestaw testów jest przydatny w tym podejściu, ponieważ można zautomatyzować proces tworzenia szkieletu i zweryfikować zmiany, uruchamiając testy.
Porady dotyczące obsługi różnic między modelami
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 obiektów DbContext i powiązanych. Następnie możesz zachować kod związany z logiką biznesową i właściwościami, które nie są śledzone w bazie danych w oddzielnym zestawie plików klas, które nie zostaną zastąpione.
Jeśli model różni się znacząco od wygenerowanego, ale nie zmienia się często, jedną z opcji do rozważenia jest użycie wzorca repozytorium jako karty. Repozytorium może korzystać z klas wygenerowanych przez platformę EF Core i publikować używane klasy niestandardowe. Może to zmniejszyć wpływ zmian, izolując je do kodu repozytorium, zamiast przeprowadzać refaktoryzację dla 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 generować tylko nowe klasy. Istniejące klasy są zachowywane w taki sposób, aby bezpośrednio dodawać lub usuwać zmienione właściwości. 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 . Aby uzyskać listę polecanych narzędzi i rozszerzeń społeczności, zobacz: 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.