Sdílet prostřednictvím


Port z EF6 do EF Core – databáze jako zdroj pravdy

Pokud databázi používáte jako zdroj pravdy, upgrade bude většinou zahrnovat vyřešení jakýchkoli změn ve tvaru vygenerovaných entit. Mezi kroky migrace patří:

  1. Vyberte model databáze k určitému bodu v čase.
  2. Ujistěte se, že jsou vaše projekty EF6 aktuální a synchronizované s databází.
  3. Vytvořte projekt EF Core.
  4. Pomocí nástrojů pro generování uživatelského rozhraní můžete databázi zpětně analyzovat na kód.
  5. Ověřte, že generované třídy EF Core jsou kompatibilní s vaším kódem.
  6. Pro výjimky buď upravte vygenerované třídy a aktualizujte konfiguraci modelu nebo upravte kód na model.

Všimněte si, že i když EF Core v současné době vygeneruje vše potřebné k úspěšnému vygenerování kopie databáze, velká část kódu není pro přístup první databáze nutná. Oprava tohoto problému se sleduje v části Problém č. 10890. Mezi věci, které můžete bezpečně ignorovat podle potřeby, patří: sekvence, názvy omezení, ne jedinečné indexy a filtry indexů.

Zpracování změn schématu

Pokud je vaše databáze zdrojem pravdy, EF Core načítá informace o schématu z databáze, místo aby je nasdílel prostřednictvím migrací. Typickým pracovním postupem je opětovné spuštění kroku zpětné analýzy při každé změně schématu databáze. Komplexní sada testů je pro tento přístup cenná, protože můžete automatizovat proces generování uživatelského rozhraní a ověřit změny spuštěním testů.

Tipy pro zpracování rozdílů modelu

Z různých důvodů můžete chtít, aby se doménový model C# tvaroval jinak než model vygenerovaný v zpětné analýze. V mnoha případech to znamená ruční aktualizaci kódu, který se automaticky vygeneruje po každé změně schématu. Jedním ze způsobů, jak zabránit dalšímu úsilí při opětovném vygenerování kódu, je použití částečných tříd pro dbContext a související entity. Pak můžete zachovat kód související s obchodní logikou a vlastnostmi, které nejsou sledovány v databázi, v samostatné sadě souborů tříd, které se nepřepíšou.

Pokud se váš model výrazně liší od vygenerovaného modelu, ale často se nemění, jednou z možností, jak zvážit, je použití vzoru úložiště jako adaptéru. Úložiště může využívat vygenerované třídy EF Core a publikovat vlastní třídy, které používáte. To může snížit dopad změn tím, že je izoluje do kódu úložiště, a nemusí provádět refaktoring pro celou aplikaci při každé změně schématu.

Můžete zvážit alternativní pracovní postup a postupovat podle kroků podobných hybridnímu přístupu. Místo generování nové sady tříd pokaždé označíte konkrétní tabulky, které budou generovat pouze nové třídy. Existující třídy zachováte tak, jak jsou, a přímo přidáte nebo odeberete vlastnosti, které se změnily. Potom aktualizujete konfiguraci modelu tak, aby řešila všechny změny způsobu, jakým se databáze mapuje na vaše stávající třídy.

Přizpůsobení generování kódu

EF Core 6 v současné době nepodporuje přizpůsobení vygenerovaného kódu. K dispozici jsou řešení třetích stran, jako jsou NÁSTROJE EF Core Power Tools . Seznam doporučených nástrojů a rozšíření komunity najdete v tématu: NÁSTROJE EF Core a rozšíření.

Nakonec si projděte podrobný seznam rozdílů mezi EF6 a EF Core a vyřešte případné zbývající problémy s přenosem.