Plán pro Entity Framework Core 5.0

Důležité

EF Core 5.0 je teď vydáno. Tato stránka zůstává jako historický záznam plánu.

Jak je popsáno v procesu plánování, shromáždili jsme vstup od zúčastněných stran do nezávazného plánu verze EF Core 5.0.

Důležité

Tento plán stále probíhá. Nic tady není závazek. Tento plán je výchozím bodem, který se bude vyvíjet, jakmile se dozvíme více. Některé věci, které se momentálně neplánují na verzi 5.0, se můžou načíst. Některé věci, které jsou aktuálně naplánovány na verzi 5.0, se můžou dostat do časového limitu.

Obecné informace

Číslo verze a datum vydání

EF Core 5.0 je aktuálně naplánováno na vydání ve stejnou dobu jako .NET 5.0. Verze 5.0 byla zvolena tak, aby odpovídala rozhraní .NET 5.0.

Podporované platformy

EF Core 5.0 se plánuje spustit na libovolné platformě .NET Standard 2.1, včetně .NET 5.0. Toto je součástí obecnější konvergence platforem .NET k .NET Core.

EF Core 5.0 se nespustí v rozhraní .NET Framework.

Změny způsobující chyby

EF Core 5.0 bude obsahovat některé zásadní změny, ale ty budou mnohem méně závažné, než tomu bylo u EF Core 3.0. Naším cílem je umožnit, aby se velká většina aplikací aktualizovala bez přerušení.

Očekává se, že poskytovatelé databází budou mít nějaké zásadní změny, zejména pokud jde o podporu TPT. Očekáváme ale, že práce na aktualizaci poskytovatele na verzi 5.0 bude menší, než byla nutná k aktualizaci verze 3.0.

Motivy

Extrahovali jsme několik hlavních oblastí nebo motivů, které tvoří základ pro velké investice do EF Core 5.0.

Plně transparentní mapování M:N podle konvence

Vedoucí vývojáři: @smitpatel, @AndriySvyryda @lajones

Sledované uživatelem č. 10508

Velikost trička: L

Stav: Hotovo

M:N je nejžádanější funkce (přibližně 506 hlasů) v backlogu GitHubu.

Podporu relací M:N je možné rozdělit do tří hlavních oblastí:

  • Přeskočte navigační vlastnosti pokryté dalším motivem.
  • Typy entit v kontejneru vlastností. Ty umožňují použití standardního typu CLR (např. Dictionary) pro instance entit tak, aby pro každý typ entity nebyl nutný explicitní typ CLR. Sleduje č. 9914.
  • Cukr pro snadnou konfiguraci relací M:N.

Kromě podpory pro přeskočení navigace teď načítáme tyto další oblasti M:N do EF Core 5.0, abychom mohli poskytovat kompletní prostředí.

Vlastnosti navigace M:N (a.k.a "skip navigations")

Vedoucí vývojáři: @smitpatel a @AndriySvyryd

Sledované uživatelem č. 19003

Velikost trička: L

Stav: Hotovo

Jak je popsáno v prvním motivu, podpora M:N má několik aspektů. Tento motiv konkrétně sleduje použití navigačních panelů pro přeskočení. Věříme, že nejvýznamnější blokátor pro ty, kteří chtějí podporu M:N, nemůže používat "přirozené" relace bez odkazování na tabulku spojení v obchodní logice, jako jsou dotazy. Typ entity tabulky spojení může stále existovat, ale neměl by se dostat do způsobu obchodní logiky.

Mapování dědičnosti tabulek na typ (TPT)

Vedoucí vývojář: @AndriySvyryd a @smitpatel

Sledované uživatelem č. 2266

Velikost trička: XL

Stav: Hotovo

TpT provádíme, protože se jedná o vysoce požadovanou funkci (~289 hlasů; 3. celkově) a protože vyžaduje určité změny nízké úrovně, které jsou vhodné pro základní povahu celkového plánu .NET 5. Očekáváme, že to povede k zásadním změnám u poskytovatelů databáze, i když by to mělo být mnohem méně závažné než změny požadované pro verzi 3.0.

Filtrované zahrnutí

Vedoucí vývojář: @maumar

Sledované uživatelem č. 1833

Velikost trička: M

Stav: Hotovo

Filtrované zahrnutí je vysoce požadovaná funkce (přibližně 376 hlasů, celkově 2. místo), která není obrovské množství práce, a že věříme, že odblokuje nebo usnadní mnoho scénářů, které aktuálně vyžadují filtry na úrovni modelu nebo složitější dotazy.

Rozdělit zahrnutí

Vedoucí vývojář: @smitpatel

Sledované uživatelem č. 20892

Velikost trička: L

Stav: Hotovo

EF Core 3.0 změnilo výchozí chování a vytvořilo jeden dotaz SQL pro daný dotaz LINQ. To způsobilo velké regrese výkonu pro dotazy, které používají include pro více kolekcí.

V EF Core 5.0 zachováváme nové výchozí chování. EF Core 5.0 ale teď umožní generování více dotazů pro kolekci Zahrnuje, kde jeden dotaz způsobuje špatný výkon.

Požadované závislé 1:1

Vedoucí vývojáři: @AndriySvyryd a @smitpatel

Sledované uživatelem č. 12100

Velikost trička: M

Stav: Hotovo

V EF Core 3.0 jsou všechny závislé osoby, včetně vlastněných typů, volitelné (např. Person.Address může mít hodnotu null). V EF Core 5.0 je možné podle potřeby nakonfigurovat závislé osoby.

Racionalizace ToTable, ToQuery, ToView, FromSql atd.

Vedoucí vývojáři: @AndriySvyryd a @smitpatel

Sledované uživatelem č. 17270

Velikost trička: L

Stav: Hotovo

V předchozích verzích jsme postupovali směrem k podpoře nezpracovaných typů SQL, bez klíčů a souvisejících oblastí. Existují však mezery i nekonzistence v tom, jak všechno funguje společně jako celek. Cílem verze 5.0 je tyto řešení opravit a vytvořit vhodné prostředí pro definování, migraci a používání různých typů entit a souvisejících dotazů a artefaktů databáze. To může také zahrnovat aktualizace zkompilovaného rozhraní API pro dotazy.

Všimněte si, že tato položka může vést k nějakým změnám na úrovni aplikace, protože některé funkce, které v současné době máme, jsou příliš permisivní, aby mohly rychle vést lidi k úsecích selhání. Některé z těchto funkcí pravděpodobně zablokujeme společně s pokyny k tomu, co místo toho udělat.

Obecná vylepšení dotazů

Vedoucí vývojáři: @smitpatel a @maumar

Sledované problémy označené area-query v milníku 5.0

Velikost trička: XL

Stav: Hotovo

Kód překladu dotazů se výrazně přepsal pro EF Core 3.0. Kvůli tomu je kód dotazu obecně mnohem robustnější. Pro verzi 5.0 neplánujeme provádět významné změny dotazů mimo ty, které jsou potřeba k podpoře tpT a přeskočení navigačních vlastností. Stále je však potřeba výrazně opravit technický dluh z 3.0 přepracování. Plánujeme také opravit mnoho chyb a implementovat malá vylepšení pro další vylepšení celkového prostředí dotazů.

Migrace a prostředí nasazení

Vedoucí vývojáři: @bricelam

Sleduje č. 19587

Velikost trička: L

Stav: Vymezený nebo dokončený

Rozsah: Funkce sad migrace byla odložena až po vydání EF Core 5.0. Do EF Core 5.0 se ale zahrne několik dalších cílených vylepšení souvisejících s migrací .

V současné době mnoho vývojářů migruje své databáze v době spuštění aplikace. To je snadné, ale nedoporučuje se, protože:

  • Souběžně se může pokusit migrovat databázi více vláken, procesů nebo serverů.
  • Aplikace se můžou pokusit o přístup k nekonzistentnímu stavu, když k tomu dochází
  • Oprávnění databáze k úpravě schématu by se obvykle neměla udělit pro provádění aplikace.
  • Pokud se něco nepokazí, je těžké se vrátit zpět k čistému stavu.

Chceme zde zajistit lepší prostředí, které umožňuje snadnou migraci databáze v době nasazení. To by mělo:

  • Práce na Linuxu, Macu a Windows
  • Být dobrým prostředím na příkazovém řádku
  • Scénáře podpory s kontejnery
  • Práce s běžně používanými nástroji nebo toky pro nasazení z reálného světa
  • Integrace do alespoň sady Visual Studio

Výsledkem bude pravděpodobně mnoho malých vylepšení EF Core (například lepší migrace na SQLite), společně s pokyny a dlouhodobějšími spoluprácemi s ostatními týmy, aby se zlepšila ucelená prostředí, která překračují rámec jen EF.

Prostředí platforem EF Core

Vedoucí vývojáři: @roji a @bricelam

Sleduje č. 19588

Velikost trička: L

Stav: Rozsah/ Hotovo

Rozsah: Pokyny k platformě a ukázky jsou publikovány pro Blazor, Xamarin, WinForms a WPF. Pro EF Core 6.0 se teď plánuje práce Xamarinu a dalších AOT/linkerů.

Máme dobré pokyny k používání EF Core v tradičních webových aplikacích podobných MVC. Pokyny pro jiné platformy a aplikační modely chybí nebo jsou zastaralé. Pro EF Core 5.0 plánujeme prozkoumat, zlepšit a zdokumentovat prostředí používání EF Core s:

  • Blazor
  • Xamarin, včetně použití scénáře AOT/linkeru
  • WinForms/WPF/WinUI a možná i jiné architektury USA

Pravděpodobně se jedná o mnoho malých vylepšení EF Core společně s doprovodnými materiály a dlouhodobějšími spoluprácemi s ostatními týmy, aby se zlepšila ucelená prostředí, která překračují rámec jen EF.

Konkrétní oblasti, na které se plánujeme podívat, jsou:

  • Nasazení, včetně prostředí pro používání nástrojů EF, jako jsou migrace
  • Aplikační modely, včetně Xamarinu a Blazoru, a pravděpodobně i jiných
  • Prostředí SQLite, včetně prostorového prostředí a opětovného sestavení tabulky
  • AOT a propojení prostředí
  • Integrace diagnostiky, včetně čítačů výkonu

Výkon

Vedoucí vývojář: @roji

Sledované problémy označené area-perf v milníku 5.0

Velikost trička: L

Stav: Vymezený nebo dokončený

Rozsah: Hlavní vylepšení výkonu v poskytovateli Npgsql jsou dokončená. Další výkonová práce se teď plánuje pro EF Core 6.0.

Pro EF Core plánujeme vylepšit naši sadu srovnávacích testů výkonu a provést směrovaná vylepšení výkonu modulu runtime. Kromě toho plánujeme dokončit nové rozhraní API pro dávkování ADO.NET, které bylo prototypováno během cyklu vydání verze 3.0. Také na ADO.NET vrstvě plánujeme další vylepšení výkonu poskytovatele Npgsql.

V rámci této práce plánujeme také podle potřeby přidat ADO.NET/EF čítače výkonu Core a další diagnostiku.

Dokumentace k architektuře nebo přispěvateli

Vedoucí dokumenter: @ajcvickers

Sleduje č. 1920

Velikost trička: L

Stav: Vyjmutí

Cílem je usnadnit pochopení toho, co se děje v interních verzích EF Core. To může být užitečné pro každého, kdo používá EF Core, ale primární motivací je usnadnit externím lidem:

  • Přispívání do kódu EF Core
  • Vytvoření zprostředkovatelů databáze
  • Sestavení dalších rozšíření

Aktualizace: Tento plán byl bohužel příliš ambiciózní. Stále si myslíme, že je to důležité, ale bohužel to nebude s EF Core 5.0.

Dokumentace k Microsoft.Data.Sqlite

Vedoucí dokumenter: @bricelam

Sleduje č. 1675

Velikost trička: M

Stav: Dokončeno. Nová dokumentace je živá na webu Microsoft docs.

Tým EF také vlastní poskytovatele microsoft.Data.Sqlite ADO.NET. Plánujeme plně zdokumentovat tohoto poskytovatele jako součást verze 5.0.

Obecná dokumentace

Vedoucí dokumenter: @ajcvickers

Sledované problémy v úložišti docs v milníku 5.0

Velikost trička: L

Stav: Probíhá

Právě probíhá aktualizace dokumentace pro verze 3.0 a 3.1. Pracujeme také na:

  • Revize úvodních dokumentů, které jim umožní přístupnější nebo snadnější sledování
  • Změna uspořádání dokumentů, aby bylo snazší najít a přidat křížové odkazy
  • Přidání dalších podrobností a objasnění do existujících dokumentů
  • Aktualizace ukázek a přidání dalších příkladů

Oprava chyb

Sledované problémy označené type-bug v milníku 5.0

Vývojáři: @roji, , @maumar, @bricelam@smitpatel, @AndriySvyryd@ajcvickers

Velikost trička: L

Stav: Probíhá

V době psaní máme 135 chyb, které se mají opravit ve verzi 5.0 (s opravenou verzí 62), ale výše se výrazně překrývají s oddílem Obecné vylepšení dotazů .

Příchozí míra (problémy, které končí jako práce v milníku) byla přibližně 23 problémů za měsíc v průběhu vydání verze 3.0. Ne všechny tyto hodnoty budou muset být opraveny ve verzi 5.0. Jako hrubý odhad plánujeme opravit další 150 problémů v časovém rámci 5,0.

Malá vylepšení

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

Vývojáři: @roji, , @maumar, @bricelam@smitpatel, @AndriySvyryd@ajcvickers

Velikost trička: L

Stav: Hotovo

Kromě větších funkcí uvedených výše máme také mnoho menších vylepšení naplánovaných na 5,0, abychom opravili "řezy papíru". Všimněte si, že mnohé z těchto vylepšení se také týkají obecnějších motivů uvedených výše.

Pod řádkem

Sledované problémy s popisky consider-for-next-release

Jedná se o opravy chyb a vylepšení, která nejsou aktuálně naplánovaná pro verzi 5.0, ale v závislosti na průběhu výše uvedeného postupu se podíváme na roztažené cíle.

Kromě toho při plánování vždy zvažujeme nejvíce hlasů. Řešení jakýchkoli těchto problémů z vydání je vždy bolestivé, ale potřebujeme realistický plán pro prostředky, které máme.

Návrhy

Váš názor na plánování je důležitý. Nejlepším způsobem, jak označit důležitost problému, je hlasovat (palec nahoru) pro tento problém na GitHubu. Tato data se pak dostanou do procesu plánování příští verze.