Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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:
- Ha még nem tette meg, lépjen az EF6-ra a .NET Core-on.
- Migrálja alkalmazásának egy kis részét az EF Core-ba, és futtassa párhuzamosan az EF6-tal.
- 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:
- Tekintse át az EF6 és az EF Core közötti viselkedésváltozásokat.
- Ha van ilyen, végezze el a végleges migrálásokat az EF6-ban.
- Hozza létre az EF Core-projektet.
- Másolja a kódot az új projektbe, futtassa a fordított tervezést, vagy mindkettő kombinációját.
- Hivatkozások és entitások átnevezése és frissítési viselkedések:
-
System.Data.EntityésMicrosoft.EntityFrameworkCore - Konstruktor módosítása
DbContextopciók fogyasztására és/vagy felülbírálásáraOnConfiguring -
DbModelBuilderésModelBuilder - Nevezze át
DbEntityEntry<T>-tEntityEntry<T>-re - Haladás
Database.LogaMicrosoft.Extensions.Logging(haladó) vagyDbContextOptionsBuilder.LogTo(egyszerű) API-k felé - Alkalmazza a változtatásokat
WithRequiredésWithOptional(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.
-
- 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.