Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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:
- Pokud jste to ještě neudělali, přejděte na EF6 v .NET Core.
- Migrujte malou část aplikace do EF Core a spusťte ji souběžně s EF6.
- 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:
- Zkontrolujte změny chování mezi EF6 a EF Core.
- V EF6 proveďte konečné migrace, pokud nějaké existují.
- Vytvořte projekt EF Core.
- Zkopírujte kód do nového projektu, spusťte zpětnou přípravu nebo kombinaci obou.
- Přejmenovat odkazy a entity a aktualizovat chování.
-
System.Data.EntitynaMicrosoft.EntityFrameworkCore - Upravte
DbContextkonstruktor na přijímání parametrů a/nebo přepsání chováníOnConfiguring -
DbModelBuildernaModelBuilder - Přejmenování
DbEntityEntry<T>naEntityEntry<T> - Přechod od
Database.LogkMicrosoft.Extensions.Logging(pokročilému) neboDbContextOptionsBuilder.LogTo(jednoduchému) rozhraní API - Použít změny pro
WithRequiredaWithOptional(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.
-
- 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.