Port EF6-ról EF Core-ra

Az Entity Framework Core vagy röviden EF Core az Entity Framework teljes átírása a modern alkalmazásarchitektúrákhoz. Az alapvető változások miatt nincs közvetlen frissítési útvonal. A dokumentáció célja, hogy átfogó útmutatót nyújtson az EF6-alkalmazások EF Core-ba történő átviteléhez.

Fontos

A portálási folyamat megkezdése előtt fontos ellenőrizni, hogy az EF Core megfelel-e az alkalmazás adathozzáférési követelményeinek. Az EF Core dokumentációjában mindent megtalál, amire szüksége van.

Figyelmeztetés

Az EF Core csak a modern .NET-t támogatja, és nem támogatja a .NET-keretrendszert. Ilyen esetben, ha a projekt még mindig a .NET-keretrendszert célozza, a modern .NET-keretrendszerbe kell migrálnia, mielőtt elkezdené a migrálást EF6-ról EF Core-ra. Vegye figyelembe, hogy az EF6 támogatja a modern .NET-et, így először az EF6 megtartása mellett migrálhat a modern .NET-be, majd kezelheti az EF6-ról az EF Core-ra való migrálást.

A frissítés okai

Minden új Entity Framework-fejlesztés az EF Core-ban történik. Nincs terv arra, hogy bármilyen új funkciót visszaportoljanak az EF6-ba. Az EF Core a legújabb .NET-futtatókörnyezeteken fut, és teljes mértékben kihasználja a futtatókörnyezetet, a platformspecifikus (például ASP.NET Core vagy WPF) és a nyelvspecifikus funkciókat. Íme néhány a frissítésből származó előnyök közül:

  • Használja ki az EF Core folyamatos teljesítménybeli fejlesztéseit . Az EF6-ról EF Core 6-ra migrált egyik ügyfél például 40-szeresére csökkentette a nagy lekérdezések használatát a lekérdezésfelosztási funkció miatt. Sok ügyfél hatalmas teljesítménynövekedésről számol be egyszerűen a legújabb EF Core-ra való áttéréssel.
  • Új funkciók használata az EF Core-ban. Nem lesznek új funkciók hozzáadva az EF6-hoz. Az összes új funkció, például az Azure Cosmos DB szolgáltató és DbContextFactorycsak az EF Core-hoz lesz hozzáadva. Az EF6 és az EF Core teljes összehasonlítása, beleértve az EF Core-ra kizárólagos számos funkciót, lásd: Az EF Core és az EF6 összehasonlítása.
  • Az alkalmazásverem modernizálása függőséginjektálással, és az adathozzáférés zökkenőmentes integrálása olyan technológiákkal, mint a gRPC és a GraphQL.

Megjegyzés a migrálásokról

Ez a dokumentáció a port és a frissítés kifejezéseket használja, hogy elkerülje a migrálások kifejezéssel való összetévesztést az EF Core szolgáltatásában. Az EF Core-beli migrálások nem kompatibilisek az EF6 Code First migrálásokkal , mivel a migrálások kezelése jelentősen javult. Nincs ajánlott megközelítés a migrálási előzmények átvitelére, ezért EF Core-ban tervezze meg az újrakezdést. Az EF6-migrálások kódbázisát és adatait megőrizheti. Alkalmazza a végleges migrálást az EF6-ban, majd hozzon létre egy kezdeti migrálást az EF Core-ban. A jövőben nyomon követheti az EF Core előzményeit.

Frissítési lépések

A frissítési útvonal több dokumentumra lett felosztva, amelyek a frissítés fázisa és az alkalmazás típusa szerint vannak rendszerezve.

Az EF Core "ízének" meghatározása

Az EF Core számos módon működik a tartománymodell és az adatbázis implementálása során. A legtöbb alkalmazás általában az alábbi minták egyikét követi, és a port megközelítésének módja az alkalmazás "ízétől" függ.

A kód, mint az igazság forrása egy olyan megközelítés, amelyben minden kód és osztály alapján modellezhető, akár adatattribútumok, fluent konfiguráció vagy mindkettő kombinációja révén. Az adatbázis kezdetben az EF Core-ban definiált modell alapján jön létre, és a további frissítéseket általában migrálások kezelik. Ezt gyakran nevezik "első kódnak", de a név nem teljesen pontos, mert az egyik módszer egy meglévő adatbázissal való kezdés, az entitások létrehozása, majd a kód előrehaladtával való fenntartása.

Az adatbázis mint alapigazság megközelítés magában foglalja a kód visszafejtését vagy felépítését az adatbázisból. Sémamódosítások esetén a kód újragenerálódik vagy frissül a módosításoknak megfelelően. Ezt gyakran "adatbázis első" megközelítésnek nevezik.

Végül egy fejlettebb hibrid leképezési megközelítés azt a filozófiát követi, hogy a kódot és az adatbázist külön kezelik, az EF Core pedig a kettő közötti leképezésre szolgál. Ez a megközelítés általában csökkenti a migrálásokat.

Az alábbi táblázat összefoglal néhány magas szintű különbséget:

Megközelítés Fejlesztői szerepkör DBA szerepkör migrálások Állványzat Repo
Első kód Entitások tervezése és a létrehozott migrálások ellenőrzése/testreszabása Sémadefiníciók és -módosítások ellenőrzése Egy commitenként Nincs adat. Entitások, DbContext és migrálások nyomon követése
Adatbázis elsőként A módosítások utáni visszafejtés és a létrehozott entitások ellenőrzése Értesítse a fejlesztőket, amikor az adatbázis megváltozik az újraépítés céljából Nincs adat. Minden egyes séma módosításakor A létrehozott entitásokat kiterjesztő bővítmények/részleges osztályok nyomon követése
Hibrid A fluent konfiguráció frissítése az entitások vagy az adatbázis módosításakor történő leképezéshez Tájékoztassa a fejlesztőket az adatbázis módosításáról, hogy frissíthessenek entitásokat és modellkonfigurációt Nincs adat. Nincs adat. Entitások és dbContext nyomon követése

A hibrid megközelítés egy fejlettebb megközelítés, amely további többletterhelést jelent a hagyományos kód- és adatbázis-megközelítésekhez képest.

Az EDMX-től való eltávolodás hatásának ismertetése

Az EF6 egy entity data model XML (EDMX) nevű speciális modelldefiníciós formátumot támogatott. Az EDMX-fájlok több definíciót tartalmaznak, beleértve a fogalmi sémadefiníciókat (CSDL), a leképezési specifikációkat (MSL) és a sémadefiníciók tárolását (SSDL). Az EF Core belső modelldiagramokon keresztül követi nyomon a tartományt, a leképezést és az adatbázissémákat, és nem támogatja az EDMX formátumot. Sok blogbejegyzés és cikk tévesen azt jelzi, hogy ez azt jelenti, hogy az EF Core csak a "kód első" használatát támogatja. Az EF Core az előző szakaszban ismertetett mindhárom alkalmazásmodellt támogatja. Az adatbázis visszafejtésével újraépítheti a modellt az EF Core-ban. Ha az EDMX-et használja az entitásmodell vizuális megjelenítéséhez, fontolja meg a nyílt forráskódú EF Core Power Tools használatát, amely hasonló képességeket biztosít az EF Core-hoz.

Az EDMX-fájlok támogatásának hiánya által okozott hatásokról további információért olvassa el az EDMX átültetési útmutatót.

A frissítési lépések végrehajtása

Nem követelmény, hogy a teljes alkalmazást portozza. Az EF6 és az EF Core ugyanabban az alkalmazásban futtatható (lásd: az EF Core és az EF6 használata ugyanabban az alkalmazásban). A kockázat minimalizálása érdekében érdemes megfontolni a következő szempontokat:

  1. Ha még nem tette meg, lépjen az EF6-ra a .NET Core-on.
  2. Migrálja alkalmazásának egy kis részét az EF Core-ba, és futtassa párhuzamosan az EF6-tal.
  3. Végül hozza a kódbázis többi részét az EF Core-ba, és vonja ki az EF6-kódot.

Ami magát a portot illeti, magas szinten a következőkre lesz szüksége:

  1. Tekintse át az EF6 és az EF Core közötti viselkedésváltozásokat.
  2. Ha van ilyen, végezze el a végleges migrálásokat az EF6-ban.
  3. Hozza létre az EF Core-projektet.
  4. Másolja a kódot az új projektbe, futtassa a fordított tervezést, vagy mindkettő kombinációját.
  5. Hivatkozások és entitások átnevezése és frissítési viselkedések:
    • System.Data.Entity és Microsoft.EntityFrameworkCore
    • Konstruktor módosítása DbContext opciók fogyasztására és/vagy felülbírálására OnConfiguring
    • DbModelBuilder és ModelBuilder
    • Nevezze át DbEntityEntry<T>-t EntityEntry<T>-re
    • Haladás Database.Log a Microsoft.Extensions.Logging (haladó) vagy DbContextOptionsBuilder.LogTo (egyszerű) API-k felé
    • Alkalmazza a változtatásokat WithRequired és WithOptional (lásd itt)
    • Érvényesítési kód frissítése. Az EF Core-ba nincs beépített adatérvényesítés, de ezt ön is elvégezheti.
    • Kövesse az EDMX-ből történő átvitelhez szükséges lépéseket.
  6. Konkrét lépéseket hajt végre az EF Core-módszer alapján:

Számos szempont vonatkozik az összes megközelítésre, ezért érdemes áttekinteni az EF6 és az EF Core közötti részletes különbségek kezelésére és megkerülésére vonatkozó módszereket is.