Plán pro Entity Framework Core 7.0

Jak je popsáno v procesu plánování, shromáždili jsme vstup od zúčastněných stran do plánu pro Entity Framework Core 7.0 (EF Core 7.0.) V zájmu stručnosti se EF Core 7.0 označuje také jako ef7.

Důležité

Tento plán není závazkem; bude se vyvíjet, jak se budeme dále učit v průběhu této verze. Některé věci, které se momentálně neplánují pro EF7, se můžou načíst. Některé věci, které jsou aktuálně naplánovány pro EF7, se můžou dostat ven.

Obecné informace

EF Core 7.0 je příští verze po EF Core 6.0 a aktuálně je naplánovaná pro vydání v listopadu 2022 ve stejnou dobu jako .NET 7. Verze EF Core 6.1 nemá žádné plány.

Podporované platformy

EF7 aktuálně cílí na .NET 6. To se může aktualizovat na .NET 7, protože jsme v blízké verzi. EF7 nemá cíl na žádnou verzi .NET Standard; Další informace naleznete v budoucnosti rozhraní .NET Standard. EF7 se nespustí v rozhraní .NET Framework.

EF7 bude v souladu se zásadami podpory .NET, a proto nebude dlouhodobou verzí (LTS).

Změny způsobující chyby

EF7 bude obsahovat malý počet zásadních změn , protože budeme i nadále vyvíjet EF Core i platformu .NET. Naším cílem je co nejvíce minimalizovat zásadní změny.

Themes

Velké investice do EF7 spadají hlavně do následujících témat:

  • Vysoce požadované funkce
  • Platformy a ekosystém NET
  • Vymazat cestu vpřed z EF6
  • Výkon

Každý z těchto motivů je podrobně popsán níže. Stav každého motivu na vysoké úrovni je možné sledovat v biweekly aktualizacích EF Core. Vyjádřete svůj názor nebo návrhy na GitHub Issue č. 26994 .

Motiv: Vysoce požadované funkce

Jako vždy hlavní vstup do procesu plánování pochází z hlasů (👍) pro funkce na GitHubu. Na základě těchtohlasůch

Sloupce JSON

Sledované podle problému č. 4021: Mapování hodnot JSON uložených v databázi na vlastnosti EF

Návrh hodnoty: Uložení a dotazování do dokumentů založených na FORMÁTU JSON uložených ve sloupcích relační databáze

Tato funkce představuje běžný mechanismus a vzory pro podporu JSON, kterou může implementovat libovolný poskytovatel databáze. Budeme spolupracovat s komunitou na sladění stávajících implementací pro Npgsql a Pomelo MySQL a také přidat podporu pro SQL Server a SQLite.

Hromadné aktualizace

Sledováno podle problému č. 795: Hromadné (tj. nastavené) operace CUD (bez načítání dat do paměti)

Hodnota návrhu: Efektivní, predikátové aktualizace pro mnoho řádků databáze bez načtení dat do paměti.

Sledování změn následované funkcí SaveChanges je primární mechanismus ef Core pro vkládání, aktualizaci a odstraňování entit. Tento mechanismus zajišťuje, že jsou databázové operace seřazené tak, aby splňovaly omezení, a že sledované entity se synchronizují se změnami provedenými v databázi. Vyžaduje však, aby se entity načetly do paměti, aby se vytvořily příslušné databázové příkazy následované zaokrouhlováním databáze, aby se tyto příkazy spustily.

Naproti tomu hromadné nebo nastavené aktualizace zahrnují definování změn, které by měly být provedeny v databázi, a následné provádění těchto změn bez prvního načtení entit do paměti. To může být výrazně rychlejší než sledované aktualizace, zejména pokud je nutné stejnou změnu použít u mnoha různých entit nebo řádků.

Pro EF7 plánujeme implementovat hromadné aktualizace a odstranění (ale ne vložení). Mějte na paměti, že hromadné aktualizace nejsou stejné jako dávkové aktualizace. EF Core již kombinuje změny mnoha sledovaných entit do dávek při odesílání aktualizací do databáze prostřednictvím SaveChanges.

Háčky životního cyklu

Sledované podle problému č. 626: Háčky životního cyklu

Cenová nabídka: Umožňuje aplikacím reagovat, když v kódu EF dojde k zajímavým věcem.

Volání životního cyklu umožňují oznámení o aplikaci nebo knihovně vždy, když dojde k určitým zajímavým podmínkám nebo akcím pro entity, vlastnosti, relace, dotazy, instance kontextu a další konstrukce EF. V předchozích verzích EF Core jsme implementovali mnoho zachytávání životního cyklu, včetně různých průsečíků a událostí. Pro EF7 plánujeme přidat důležité chybějící háky. Například háček pro manipulaci s instancemi entit po jejich vytvoření, běžně označovaný jako ObjectMaterialized.

Mapování TPC (Table-per-beton-type)

Sledované podle problému č. 3170: Model mapování dědičnosti TPC

Návrh hodnoty: Namapujte entity v hierarchii na samostatné tabulky bez toho, abyste dosáhli výkonu mapování TPT.

EF Core podporuje mapování tabulek na hierarchii (TPH) a tabulek na typ (TPT) pro hierarchie dědičnosti .NET. Mapování TPC (Table-per-beton-type) je podobné mapování TPT v tom, že každý typ entity v hierarchii je mapován na jinou tabulku databáze. Zatímco TPT mapuje vlastnosti ze základního typu na sloupce v tabulce pro základní typ, TPC mapuje vlastnosti základního typu na stejnou tabulku jako skutečný konkrétní typ mapovaný. To může mít za následek výrazně rychlejší výkon, protože při dotazování na konkrétní typ není potřeba spojit více tabulek. To je na úkor denormalizace dat, protože sloupce jsou duplikovány napříč tabulkami mapovanými na každý konkrétní typ v hierarchii.

Práce na mapování TPC zahrnuje také obecnější rozdělení entit a podporu pro určení různých omezujících vlastností na tabulku v rozdělení TPT, TPC nebo entity.

Mapování operací CUD na uložené procedury

Sledované podle problému č. 245: Vložení, aktualizace a odstranění map (operace CUD) do uložených procedur

Návrh hodnoty: Použití uložených procedur ke správě úprav dat.

EF Core už podporuje dotazování dat z uložených procedur. Tato funkce umožní mapování vložení, aktualizací a odstranění vygenerovaných uloženými SaveChanges procedurami v databázi.

Objekty hodnot

Sledované podle problému č. 9906: Použití struktur nebo tříd jazyka C# jako hodnotových objektů

Návrh hodnoty: Aplikace můžou v modelech EF používat objekty hodnot ve stylu DDD.

Bylo to dříve zobrazení týmu, že vlastněné entity, které jsou určeny pro agregační podporu, by také přiměřené aproximace k hodnotovým objektům. Zkušenosti ukázaly, že se nejedná o případ. Proto v EF7 plánujeme zavést lepší prostředí zaměřené na potřeby hodnotových objektů v návrhu řízeném doménou. Tento přístup bude založený na převaděčích hodnot, nikoli na vlastněných entitách.

Tato práce je původně vymezena tak, aby umožňovala převaděče hodnot, které se mapují na více sloupců. Během vydání můžeme vyžádat další podporu na základě zpětné vazby.

Podpora generování hodnot při použití převaděčů hodnot

Sledované podle problému č. 11597: Podpora více typů generování hodnot pomocí převaděčů

Návrh hodnoty: Zapouzdřené typy klíčů ve stylu DDD můžou plně využívat automaticky generované hodnoty klíče.

EF Core 6.0 povolilo použití více typů generování hodnot s klíči mapovanými prostřednictvím převaděčů hodnot. Plánujeme zobecnit a rozšířit tuto podporu v EF7.

Nezpracované dotazy SQL pro nemapované typy

Sledované podle problému č. 10753: Podpora nezpracovaných dotazů SQL bez definování typu entity pro výsledek

Návrh hodnoty: Aplikace můžou spouštět více typů nezpracovaných dotazů SQL, aniž by se museli ADO.NET nebo používat knihovny třetích stran.

V současné době nezpracované dotazy SQL musí v modelu vracet typ, a to buď s definovaným klíčem, nebo bez. V EF7 plánujeme povolit nezpracované dotazy SQL, které přímo vrací typy, které nejsou obsaženy v modelu EF.

Tato práce bude také zahrnovat nezpracované dotazy SQL, které vracejí jednoduché nebo skalární typy, jako Guidjsou , DateTime, inta string.

Šablony generování databází

Sledované podle problému č. 4038: Šablony kódu pro generování typů entit a DbContext z existující databáze

Návrh hodnoty: Kód vygenerovaný dotnet ef database scaffold pomocí můžou být plně přizpůsobeny.

Často dostáváme požadavky na úpravu kódu vygenerovaného při generování uživatelského rozhraní (zpětné analýzy) z existující databáze. Tyto žádosti v EF7 plánujeme řešit podporou šablon T4 pro generované typy entit a DbContext. Vývojáři budou moct přizpůsobit standardní šablony nebo vytvářet nové šablony od začátku.

Motiv: Platformy a ekosystém .NET

Většina práce plánované pro EF7 zahrnuje zlepšení prostředí pro přístup k datům pro .NET na různých platformách a doménách. To zahrnuje práci v EF Core v případě potřeby, ale také pracovat v jiných oblastech, aby se zajistilo skvělé prostředí napříč technologiemi .NET. Zaměříme se na následující platformy a technologie pro vydání EF7:

Tento seznam vychází z mnoha faktorů, včetně zákaznických dat, strategického směru a dostupných prostředků. Obecné oblasti, na kterých budeme pracovat, jsou uvedeny níže.

Distribuované transakce

Sledováno podle problému č. 715 v dotnet/runtime: Implementace distribuovaných nebo upřednostněných transakcí v System.Transactions

Návrh hodnoty: Aplikace rozhraní .NET Framework využívající distribuované transakce je možné přenést do .NET 7.

Knihovna System.Transactions v rozhraní .NET Framework obsahuje nativní kód, který využívá koordinátor DTC (Windows Distributed Transactions Coordinator) k podpoře distribuovaných transakcí. Tento kód nebyl nikdy portován do .NET Core. V časovém rámci .NET 7 plánujeme prozkoumat a zahájit proces přenesení této funkce do moderní .NET. To bude zpočátku pouze pro Windows a bude podporovat pouze databázové scénáře, ve kterých poskytovatel ADO.NET podporuje také distribuované transakce. Jiné použití distribuovaných transakcí, jako je například wcf, nebudou podporovány v rozhraní .NET 7. Na základě zpětné vazby a nákladů můžeme v budoucí verzi implementovat podporu pro jiné scénáře nebo platformy jiné než Windows.

Nástroje EF Core

Sledované podle problému č. 26798: Modernizace nástrojů EF Core

Návrh hodnoty: dotnet ef příkazy se snadno používají a pracují s moderními platformami a technologiemi.

Platformy .NET se vyvinuly od prvního zavedení nástrojů pro migrace, generování databází atd. v EF Core 1.0. V EF7 plánujeme aktualizovat architekturu nástrojů tak, aby lépe podporovala nové platformy, jako je .NET MAUI, a zjednodušit proces v oblastech, jako je použití více projektů. To zahrnuje lepší zpětnou vazbu, když se něco pokazí, lepší integrace s protokolováním, výkonem a novým cukrem.

EF Core a grafická uživatelská rozhraní

Sledované podle problému č. 26799: Vylepšení prostředí pro datové vazby a grafická rozhraní

Návrh hodnoty: Vytváření grafických aplikací vázaných na data pomocí EF Core je snadné.

EF Core je navržený tak, aby dobře fungoval se scénáři datových vazeb, jako jsou například scénáře model Windows Forms a .NET MAUI. Propojení tečk mezi těmito technologiemi ale není vždy snadné. Pro EF7 plánujeme zlepšit práci v EF Core i v sadě Visual Studio, abychom usnadnili vytváření aplikací vázaných na data pomocí EF Core.

SqlServer.Core (Woodstar)

Sledované v úložišti .NET Data Lab

Návrh hodnoty: Rychlý a plně spravovaný přístup k SQL Serveru a Azure SQL pro moderní aplikace .NET.

Microsoft.Data.SqlClient je plně funkční poskytovatel databáze ADO.NET pro SQL Server. Podporuje širokou škálu funkcí SQL Serveru v rozhraní .NET Core i .NET Framework. Je to ale také velký a starý základ kódu s mnoha složitými interakcemi mezi jeho chováním. To ztěžuje zkoumání potenciálních výhod, které by bylo možné provést pomocí novějších funkcí .NET Core.

V minulém roce jsme zahájili projekt, který se označuje jako "Woodstar", aby prozkoumal potenciál vysoce výkonného ovladače SQL Serveru pro .NET. Plánujeme do tohoto projektu v časovém rámci EF7 výrazně investovat.

Důležité

Investice do Microsoft.Data.SqlClient se nemění. Bude i nadále doporučeným způsobem připojení k SQL Serveru a Azure SQL, a to jak s EF Core, tak bez ní. Bude i nadále podporovat nové funkce SQL Serveru, jak jsou zavedeny.

Poskytovatel služby Azure Cosmos DB

Sledované problémy označené jako area-cosmos a v milníku 7.0

Návrh hodnoty: Pokračujte v tom, aby EF Core byl nejjednodušším a nejproduktivnějším způsobem práce se službou Azure Cosmos DB.

Ve verzi 6.0 jsme výrazně vylepšili poskytovatele databáze EF Core Azure Cosmos DB. Tato vylepšení vytvořila prvotřídní prostředí pro práci se službou Azure Cosmos DB z EF Core, což se odráží významným nárůstem přijetí. Plánujeme pokračovat v této dynamikě v EF7 s následujícími dalšími vylepšeními poskytovatele služby Azure Cosmos DB:

Nezapomeňte hlasovat (👍) pro funkce poskytovatele služby Azure Cosmos DB, které potřebujete, abychom mohli posoudit, kam investovat nejvíce výhod.

Prostředí migrace

Sledované podle problému č. 22946: Vylepšení migrací databází

Cenová nabídka: Je snadné začít s migracemi a později je efektivně používat v kanálech CI/CD.

EF Core 6.0 zavedl sady migrace, což výrazně zlepšuje prostředí pro aplikace nativní pro cloud a nasazování databází v rámci systémů kontinuální integrace a nasazování. V EF7 plánujeme v této oblasti na základě zpětné vazby zákazníků provést další vylepšení. Plánujeme například podporovat provádění všech migrací v jedné transakci , abychom usnadnili obnovení, pokud se něco nepovede.

Kromě toho plánujeme vylepšit prostředí pro vývojáře, kteří s migrací začínají. To zahrnuje možnost automatického vytvoření databáze při učení nebo zahájení projektu a následný přechod na spravované migrace , jakmile projekt zralý. Pro projekty se stávající databází plánujeme usnadnit vytvoření počátečního modelu EF a následnou správu databáze pomocí migrací .

Moderní .NET

S tím, jak se .NET stále vyvíjí, chceme zajistit, aby byl přístup k datům i nadále skvělým prostředím. Abychom to usnadnili, plánujeme během časového rámce EF7 pokračovat ve třech oblastech.

Oříznutí

Sledované podle problému č. 21894: Vylepšení podpory oříznutí aplikací EF Core za účelem zmenšení velikosti aplikace

Hodnota návrhu: Menší aplikace, které lze efektivně zkompilovat AOT.

EF Core provádí velké objemy generování kódu modulu runtime. To je náročné pro modely aplikací, které závisí na roztřesení stromu linkerů, jako je Xamarin a Blazor, a platformy, které neumožňují dynamickou kompilaci, jako je iOS. Plánujeme výrazně zlepšit oříznutí nepoužívaného kódu v EF7. To usnadní menší velikosti sestavení při použití EF Core, což pomůže nasazení a efektivnější kompilaci AOT (head-of-time).

Evolve System.Linq.Expression

Návrh hodnoty: Použití moderních jazykových funkcí jazyka C# v dotazech LINQ

Pracujeme s týmem Roslyn na plánu, abychom umožnili použití dalších funkcí jazyka C# ve výrazech LINQ. Jedná se o probíhající práci, která bude většinou sledována mimo úložiště EF Core.

Překlad nových operátorů LINQ

Sledované podle problému č. 25570: Podpora nových funkcí .NET LINQ

Návrh hodnoty: Při překladu dotazů LINQ do SQL použijte nové operátory LINQ.

Do seznamu BCL jsme nedávno přidali nové operátory LINQ a očekáváme, že budeme přidávat další. Problém č. 25570 sleduje přidání podpory pro tyto nástroje do zprostředkovatele LINQ EF7. Tento problém se aktualizuje při přidání nových operátorů LINQ. Stejně jako u všech existujících operátorů LINQ přidáme podporu pouze v případě, že má operátor rozumný a užitečný překlad do databáze.

Otevření telemetrie pro poskytovatele ADO.NET

Sledováno podle problému č. 22336: Standardizace v DiagnosticSource/OpenTelemetry pro trasování databáze

Cenová nabídka: Multiplatformní standardní telemetrie, kterou můžete monitorovat ve zvoleném nástroji.

Otevřená telemetrie je iniciativa Cloud Native Foundation, která podporuje společný mechanismus telemetrie pro software nativní pro cloud. Pokud jde o databáze, patří sem vytvoření standardu telemetrie databázového klienta. Plánujeme pracovat v časovém rámci EF7, abychom pomohli přinést otevřenou telemetrii ADO.NET poskytovatelům v ekosystému .NET. To zahrnuje spolupráci s komunitou na opensourcových poskytovatelích MySQL a Npgsql a microsoft.Data.Sqlite. Budeme se také spojit s dalšími poskytovateli a doporučujeme udržovatelům ADO.NET poskytovatelů, aby se v případě zájmu dotýkali.

Vylepšení system.data

Sledované problémy v úložišti dotnet\runtime označeném area-System.Data v milníku 7.0

Cenová nabídka: Lepší přístup k datům nízké úrovně, abyste mohli využívat veškerý kód vyšší úrovně.

Stejně jako u každé verze máme v úmyslu prozkoumat vylepšení . Rozhraní API pro přístup k databázi nízké úrovně, System.Data. Zaměříme se na vylepšení výkonu (např. snížení přidělení paměti odstraněním boxování při použití rozhraní API) a také na některá vylepšení použitelnosti.

Rozsah přesných vylepšení bude určen později na základě proveditelnosti.

Výzkum přístupu k datům pro nativní cloud

Cenová nabídka: Budoucí vývoj přístupu k datům .NET, který podporuje moderní přístupy, jako jsou mikroslužby a nativní pro cloud.

V časovém rámci EF7 plánujeme prozkoumat moderní přístupy k přístupu k datům napříč platformami .NET, zejména v případě mikroslužeb a aplikací nativních pro cloud. Tento výzkum pomůže podpořit budoucí investice do technologií přístupu k datům pro .NET.

Motiv: Vymazat cestu vpřed z EF6

Sledovaný problém na webu Docs č. 1180: Uveďte ucelenějšího průvodce přenosem z EF6.

Návrh hodnoty: Snadno přesuňte aplikaci z EF6 na EF7.

EF Core vždy podporuje mnoho scénářů, které starší sada EF6 nepokrývá, a obecně mnohem vyšší výkon. EF6 má ale podobné podporované scénáře, které EF Core nepokrýval. EF7 přidá podporu pro mnoho z těchto scénářů, což umožní více aplikacím portovat ze starší verze EF6 do EF7. Zároveň plánujeme komplexního průvodce přenosem pro aplikace, které se přesouvají ze starší verze EF6 na EF Core.

Velká část práce v tomto motivu se překrývá s prací, která už je popsaná výše. Mezi nejvýznamnější pracovní položky patří:

Kromě toho plánujeme, aby bylo jasné , že starší úložiště EF6 Na GitHubu neplánujeme žádnou budoucí práci na EF6. Výjimkou je, že plánujeme přidat podporu pro použití EF6 s Microsoft.Data.SqlClient. To bude omezeno na podporu modulu runtime. Použití návrháře EF6 v sadě Visual Studio bude nadále vyžadovat System.Data.SqlClient.

Mějte na paměti, že EF Core má v podstatě jinou architekturu než EF6. Konkrétně nevyužívá specifikaci Entity Data Model (EDM). To znamená, že některé funkce, jako je EDMX a EntitySQL, se v EF Core nikdy nepodporují.

Motiv: Výkon

Skvělý výkon je základní princip EF Core, přístup k datům nižší úrovně a skutečně všechny platformy .NET. Každá verze zahrnuje významnou práci na zlepšení výkonu. Jako vždy bude tento motiv zahrnovat velké množství iterativního zkoumání, které pak informuje o tom, kde se zaměříme na zdroje.

Výkon vkládání a aktualizací databáze

Sledování podle problému 26797: Zlepšení sledování změn a výkon aktualizace

Návrh hodnoty: Databáze s vysokým výkonem vkládá a aktualizuje z EF Core.

V posledních několika verzích jsme se zaměřili na zlepšení výkonu EF Core na nesledujících dotazech. Pro EF7 plánujeme zaměřit se na výkon související s vkládáním a aktualizacemi databáze. To zahrnuje výkon dotazů sledování změn, výkon DetectChangesa výkon příkazů pro vložení a aktualizaci odesílaných do databáze.

Součástí této práce je implementace hromadných aktualizací (založených na sadě), které jsou sledovány výše jako vysoce požadovaná funkce. Plánujeme ale také zlepšit výkon tradičních aktualizací pomocí SaveChanges.

Složené skóre TechEmpower

Sledované podle problému 26796: Zvýšení výkonu ve složeném skóre TechEmpower

Návrh hodnoty: Vysoce výkonné aktualizace dat nízké úrovně pro všechny aplikace .NET.

Několik let provozujeme oborové standardní srovnávací testy TechEmpower na platformě .NET vůči databázi PostgreSQL. V posledních několika verzích jsme výrazně vylepšili srovnávací test Fortunes pro přístup k datům nízké úrovně i EF Core.

V časovém rámci EF7 plánujeme konkrétně cílit na vylepšení složeného skóre TechEmpower. Tím se měří výkon v širším rozsahu scénářů.

Různé funkce

Sledované problémy označené type-enhancement v milníku 7.0

Cenová nabídka: Průběžné vylepšování EF Core tak, aby splňovalo stávající a vyvíjející se požadavky aplikací.

Mezi různé funkce plánované pro EF 7.0 patří, ale nejsou omezeny na:

Návrhy

Váš názor na plánování je důležitý. Vyjádřete komentář k problému Na GitHubu č. 26994 s případnými názory nebo obecnými návrhy na tento plán. Nejlepším způsobem, jak označit důležitost problému, je hlasovat (👍) pro tento problém na GitHubu. Tato data se pak dostanou do procesu plánování příští verze.