Sdílet prostřednictvím


Migrace z EF6 do EF Core

Entity Framework Core nebo EF Core je celkem přepsání Entity Frameworku pro moderní aplikační architektury. Vzhledem k základním změnám neexistuje přímá cesta upgradu. Účelem této dokumentace je poskytnout ucelený průvodce pro přenos aplikací EF6 do EF Core.

Důležité

Než začnete s procesem přenosu, je důležité ověřit, že EF Core splňuje požadavky na přístup k datům pro vaši aplikaci. Všechno, co potřebujete, najdete v dokumentaci k EF Core.

Výstraha

EF Core podporuje pouze moderní .NET a nepodporuje rozhraní .NET Framework. Pokud váš projekt stále cílí na rozhraní .NET Framework, budete muset před zahájením migrace z EF6 na EF Core provést migraci na moderní .NET. Mějte na paměti, že EF6 podporuje moderní .NET, takže můžete nejprve migrovat na moderní .NET a přitom zachovat EF6 a pak vyřešit migraci z EF6 na EF Core.

Důvody aktualizace

Veškerý nový vývoj pro Entity Framework probíhá v EF Core. Do EF6 se neplánují přeportovat žádné nové funkce. EF Core běží na nejnovější verzi .NET a plně využívá vlastnosti runtime, specifické pro platformu (jako ASP.NET Core nebo WPF) a specifické pro jazyk. Tady je několik výhod, které získáte při upgradu:

  • Využijte průběžné vylepšení výkonu v EF Core. Například jeden zákazník, který migroval z EF6 na EF Core 6, viděl 40x snížení využití náročného dotazu kvůli funkci dělení dotazů. Mnoho zákazníků hlásí obrovské zvýšení výkonu jednoduše přechodem na nejnovější EF Core.
  • Používejte nové funkce v EF Core. Do EF6 nebudou přidány žádné nové funkce. Všechny nové funkce, například poskytovatel služby Azure Cosmos DB , a DbContextFactorybudou přidány pouze do EF Core. Úplné porovnání EF6 s EF Core, včetně několika funkcí exkluzivních pro EF Core, najdete v tématu : Porovnání EF Core a EF6.
  • Modernizovat zásobník aplikací pomocí injektáže závislostí a bezproblémově integrovat přístup k datům s technologiemi, jako jsou gRPC a GraphQL.

Poznámka k migracím

Tato dokumentace používá termíny port a upgrade, aby nedocházelo k nejasnostem s termínem migrace jako funkcí EF Core. Migrace v EF Core nejsou kompatibilní s migracemi EF6 Code First kvůli významným vylepšením způsobu zpracování migrací. K přenesení historie migrací není doporučený postup, takže v EF Core plánujte začít od začátku s vytvořením nových migrací. Základ kódu a data můžete udržovat z migrací EF6. Proveďte konečnou migraci v EF6 a pak vytvořte počáteční migraci v EF Core. V EF Core budete moct sledovat historii.

Postup pro upgrade

Cesta upgradu byla rozdělena do několika dokumentů uspořádaných podle fáze upgradu a typu aplikace.

Určete svou "verzi" EF Core

Existuje několik přístupů, jak EF Core funguje s vaším doménovým modelem a implementací databáze. Obecně platí, že většina aplikací bude dodržovat jeden z těchto vzorů a způsob přístupu k portu bude záviset na "příchutě" aplikace.

Kód jako zdroj pravdy je přístup, ve kterém se vše modeluje prostřednictvím kódu a tříd, ať už prostřednictvím atributů dat, fluent konfigurace nebo kombinace obou. Databáze se zpočátku generuje na základě modelu definovaného v EF Core a další aktualizace se obvykle zpracovávají prostřednictvím migrací. Často se tomu říká "code first", ale tento název není zcela přesný, protože jedním z přístupů je začít s existující databází, vygenerovat entity a poté dále pokračovat v údržbě pomocí kódu.

Databáze jako zdroj pravdy zahrnuje zpětné inženýrství nebo generování kódu z databáze. Při provedení změn schématu se kód vygeneruje nebo aktualizuje tak, aby odrážel změny. To se často nazývá "databáze jako první".

A konečně pokročilejší přístup hybridního mapování se řídí filozofiemi, které kód a databáze spravují samostatně, a EF Core se používá k mapování mezi těmito dvěma. Tento přístup obvykle vyhýbá migracím.

Následující tabulka shrnuje některé základní rozdíly:

Přístup Role vývojáře Role správce databáze (DBA) migrace Lešení Repo
Nejprve kód Návrh entit a ověření nebo přizpůsobení vygenerovaných migrací Ověření definic a změn schématu Za potvrzení není k dispozici Sledování entit, DbContextu a migrací
Nejprve databáze Zpětná analýza po změnách a ověření vygenerovaných entit Informujte vývojáře, aby znovu vygenerovali scaffolding, když se databáze změní. není k dispozici Změna schématu Sledování rozšíření nebo částečných tříd, které rozšiřují vygenerované entity
Hybridní model Aktualizaci konfigurace Fluent tak, aby mapovala pokaždé při každé změně v entitách nebo databázi Informujte vývojáře, když se databáze změnila, aby mohli aktualizovat entity a konfiguraci modelu. není k dispozici není k dispozici Sledování entit a DbContext

Hybridní přístup je pokročilejší přístup s další režií v porovnání s tradičními přístupy kódu a databáze.

Vysvětlení dopadu přesunu z EDMX

EF6 podporoval speciální formát definice modelu s názvem Entity Data Model XML (EDMX). Soubory EDMX obsahují více definic, včetně koncepčních definic schématu (CSDL), specifikací mapování (MSL) a ukládání definic schématu (SSDL). EF Core sleduje schéma domény, mapování a databáze prostřednictvím interních grafů modelů a nepodporuje formát EDMX. Mnoho blogových příspěvků a článků omylem uvádí, že EF Core podporuje pouze "kód první". EF Core podporuje všechny tři aplikační modely popsané v předchozí části. Model v EF Core můžete znovu sestavit pomocí zpětné analýzy databáze. Pokud používáte EDMX pro vizuální znázornění modelu entity, zvažte použití opensourcových nástrojů EF Core Power Tools , které poskytují podobné možnosti pro EF Core.

Další informace o dopadu nedostatku podpory souborů EDMX najdete v průvodci portováním EDMX .

Proveďte kroky upgradu

Není nutné portovat celou aplikaci. EF6 a EF Core se dají spustit ve stejné aplikaci (viz: použití EF Core a EF6 ve stejné aplikaci). Pokud chcete minimalizovat riziko, můžete zvážit:

  1. Pokud jste to ještě neudělali, přejděte na EF6 v .NET Core.
  2. Migrujte malou část aplikace do EF Core a spusťte ji souběžně s EF6.
  3. Nakonec přeneste zbytek základu kódu do EF Core a vyřaďte kód EF6.

Pokud jde o samotný port, budete na vysoké úrovni:

  1. Zkontrolujte změny chování mezi EF6 a EF Core.
  2. V EF6 proveďte konečné migrace, pokud nějaké existují.
  3. Vytvořte projekt EF Core.
  4. Zkopírujte kód do nového projektu, spusťte zpětnou přípravu nebo kombinaci obou.
  5. Přejmenovat odkazy a entity a aktualizovat chování.
    • System.Data.Entity na Microsoft.EntityFrameworkCore
    • Upravte DbContext konstruktor na přijímání parametrů a/nebo přepsání chování OnConfiguring
    • DbModelBuilder na ModelBuilder
    • Přejmenování DbEntityEntry<T> na EntityEntry<T>
    • Přechod od Database.Log k Microsoft.Extensions.Logging (pokročilému) nebo DbContextOptionsBuilder.LogTo (jednoduchému) rozhraní API
    • Použít změny pro WithRequired a WithOptional (viz tady)
    • Aktualizujte ověřovací kód. Do EF Core není integrované ověřování dat, ale můžete to udělat sami.
    • Proveďte všechny nezbytné kroky pro přenesení z EDMX.
  6. Proveďte konkrétní kroky na základě přístupu EF Core:

Existuje mnoho aspektů, které souvisí se všemi přístupy, takže budete také chtít zkontrolovat způsoby, jak vyřešit a obejít podrobné rozdíly mezi EF6 a EF Core.