Pianificare Entity Framework Core 5.0
Importante
EF Core 5.0 è stato rilasciato. Questa pagina rimane come record cronologico del piano.
Come descritto nel processo di pianificazione, abbiamo raccolto l'input degli stakeholder in un piano provvisorio per la versione di EF Core 5.0.
Importante
Questo piano è ancora in corso. Niente qui è un impegno. Questo piano è un punto di partenza che si evolverà man mano che si apprenderanno di più. Alcune cose non pianificate per la versione 5.0 potrebbero essere estratte. Alcune cose attualmente previste per le 5.0 potrebbero essere puntate.
Informazioni generali
Numero di versione e data di rilascio
EF Core 5.0 è attualmente pianificato per il rilascio contemporaneamente a .NET 5.0. La versione "5.0" è stata scelta per allinearsi a .NET 5.0.
Piattaforme supportate
EF Core 5.0 è pianificato per l'esecuzione in qualsiasi piattaforma .NET Standard 2.1, tra cui .NET 5.0. Questo fa parte della convergenza più generale delle piattaforme .NET in .NET Core.
EF Core 5.0 non verrà eseguito in .NET Framework.
Modifiche di rilievo
EF Core 5.0 conterrà alcune modifiche di rilievo, ma queste modifiche saranno molto meno gravi rispetto a quelle di EF Core 3.0. L'obiettivo è consentire alla maggior parte delle applicazioni di eseguire l'aggiornamento senza interruzioni.
È previsto che ci saranno alcune modifiche di rilievo per i provider di database, in particolare per quanto riguarda il supporto TPT. Tuttavia, si prevede che il lavoro per aggiornare un provider per la versione 5.0 sia inferiore a quanto richiesto per l'aggiornamento per la versione 3.0.
Temi
Sono state estratte alcune aree o temi principali che costituiranno la base per gli investimenti di grandi dimensioni in EF Core 5.0.
Mapping molti-a-molti completamente trasparente per convenzione
Sviluppatori potenziali: @smitpatel, @AndriySvyryde @lajones
Tracciata da #10508
T-shirt size: L
Stato: Operazione completata
Molti-a-molti è la funzionalità più richiesta (~506 voti) nel backlog di GitHub.
Il supporto per le relazioni molti-a-molti può essere suddiviso in tre aree principali:
- Ignorare le proprietà di spostamento coperte dal tema successivo.
- Tipi di entità contenitore delle proprietà. Questi consentono l'uso di un tipo CLR standard (ad esempio
Dictionary
) per le istanze di entità in modo che non sia necessario un tipo CLR esplicito per ogni tipo di entità. Tracciata dal numero 9914. - Sugar per semplificare la configurazione delle relazioni molti-a-molti.
Oltre al supporto di skip navigation, queste altre aree di EF Core 5.0 vengono ora estratte in modo da offrire un'esperienza completa.
Proprietà di navigazione molti-a-molti (ad esempio "ignora spostamenti")
Sviluppatori potenziali: @smitpatel e @AndriySvyryd
Tracciata da #19003
T-shirt size: L
Stato: Operazione completata
Come descritto nel primo tema, il supporto molti-a-molti presenta più aspetti. Questo tema tiene in particolare traccia dell'uso degli spostamenti ignorati. Crediamo che il blocco più significativo per coloro che desiderano il supporto molti-a-molti non sia in grado di usare le relazioni "naturali", senza fare riferimento alla tabella join, nella logica di business, ad esempio le query. Il tipo di entità di tabella join può ancora esistere, ma non dovrebbe essere in modo da ottenere la logica di business.
Mapping di ereditarietà della tabella per tipo (TPT)
Sviluppatore responsabile: @AndriySvyryd e @smitpatel
Rilevata da #2266
T-shirt size: XL
Stato: Operazione completata
Stiamo facendo TPT perché si tratta di una funzionalità altamente richiesta (~289 voti; 3° generale) e perché richiede alcune modifiche di basso livello che riteniamo siano appropriate per la natura fondamentale del piano globale .NET 5. Si prevede che ciò comporti modifiche di rilievo per i provider di database, anche se queste devono essere molto meno gravi delle modifiche necessarie per la versione 3.0.
Inclusione filtrata
Sviluppatore responsabile: @maumar
Tracciato da #1833
T-shirt size: M
Stato: Operazione completata
L'inclusione filtrata è una funzionalità altamente richiesta (~376 voti, 2° totale) che non è una grande quantità di lavoro e che riteniamo che sbloccherà o renderà più semplici molti scenari che richiedono attualmente filtri a livello di modello o query più complesse.
Divisione inclusione
Sviluppatore responsabile: @smitpatel
Tracciata da #20892
T-shirt size: L
Stato: Operazione completata
EF Core 3.0 ha modificato il comportamento predefinito per creare una singola query SQL per una determinata query LINQ. Ciò ha causato regressioni di prestazioni di grandi dimensioni per le query che usano Include per più raccolte.
In EF Core 5.0 viene mantenuto il nuovo comportamento predefinito. Tuttavia, EF Core 5.0 consentirà ora la generazione di più query per la raccolta Include in cui la presenza di una singola query causa prestazioni non ottimali.
Dipendenti uno-a-uno necessari
Sviluppatori potenziali: @AndriySvyryd e @smitpatel
Tracciata da #12100
T-shirt size: M
Stato: Operazione completata
In EF Core 3.0 tutti i dipendenti, inclusi i tipi di proprietà, sono facoltativi(ad esempio Person.Address può essere Null). In EF Core 5.0 i dipendenti possono essere configurati in base alle esigenze.
Razionalizzare ToTable, ToQuery, ToView, FromSql e così via
Sviluppatori potenziali: @AndriySvyryd e @smitpatel
Tracciata da #17270
T-shirt size: L
Stato: Operazione completata
Sono stati compiuti progressi nelle versioni precedenti per supportare SQL non elaborato, tipi senza chiave e aree correlate. Tuttavia, ci sono sia lacune che incoerenze nel modo in cui tutto funziona insieme nel suo complesso. L'obiettivo della versione 5.0 è risolvere questi problemi e creare un'esperienza ottimale per la definizione, la migrazione e l'uso di diversi tipi di entità e query e artefatti di database associati. Ciò può comportare anche aggiornamenti all'API di query compilata.
Si noti che questo elemento può comportare alcune modifiche di rilievo a livello di applicazione poiché alcune delle funzionalità attualmente disponibili sono troppo permissive in modo che possa portare rapidamente le persone in problemi di errore. È probabile che si blocchino alcune di queste funzionalità insieme alle indicazioni su cosa fare.
Miglioramenti generali delle query
Sviluppatori potenziali: @smitpatel e @maumar
Rilevati da problemi etichettati con area-query
nell'attività cardine 5.0
T-shirt size: XL
Stato: Operazione completata
Il codice di traduzione delle query è stato ampiamente riscritto per EF Core 3.0. Il codice della query è in genere in uno stato molto più affidabile a causa di questo. Per la versione 5.0 non si prevede di apportare modifiche importanti alle query, al di fuori di quelle necessarie per supportare TPT e ignorare le proprietà di navigazione. Tuttavia, c'è ancora un lavoro significativo necessario per risolvere alcuni debiti tecnici rimasti dalla revisione della 3.0. Si prevede anche di correggere molti bug e implementare piccoli miglioramenti per migliorare ulteriormente l'esperienza complessiva delle query.
Esperienze di migrazione e distribuzione
Sviluppatori potenziali: @bricelam
Tracciata dal numero 19587
T-shirt size: L
Stato: ambito/operazione completata
Definizione dell'ambito: la funzionalità dei bundle delle migrazioni è stata posticipata fino al rilascio di EF Core 5.0. Tuttavia, diversi altri miglioramenti mirati correlati alle migrazioni verranno inclusi in EF Core 5.0
Attualmente, molti sviluppatori eseguono la migrazione dei database al momento dell'avvio dell'applicazione. Questo è semplice ma non è consigliato perché:
- È possibile che più thread/processi/server tentino di eseguire la migrazione simultanea del database
- Le applicazioni possono provare ad accedere a uno stato incoerente mentre si verifica
- In genere le autorizzazioni del database per modificare lo schema non devono essere concesse per l'esecuzione dell'applicazione
- È difficile ripristinare uno stato pulito se qualcosa va storto
In questo caso si vuole offrire un'esperienza migliore che consente di eseguire facilmente la migrazione del database in fase di distribuzione. Questo dovrebbe:
- Usare Linux, Mac e Windows
- Un'esperienza ottimale nella riga di comando
- Scenari di supporto con contenitori
- Usare gli strumenti/flussi di distribuzione reali usati di frequente
- Eseguire l'integrazione in almeno Visual Studio
Il risultato è probabilmente costituito da molti piccoli miglioramenti in EF Core (ad esempio, Migrazioni migliori in SQLite), insieme alle linee guida e alle collaborazioni a lungo termine con altri team per migliorare le esperienze end-to-end che vanno oltre solo EF.
Esperienza delle piattaforme EF Core
Sviluppatori potenziali: @roji e @bricelam
Tracciata dal numero 19588
T-shirt size: L
Stato: ambito/operazione completata
Definizione dell'ambito: le linee guida e gli esempi della piattaforma vengono pubblicati per Blazor, Xamarin, WinForms e WPF. Xamarin e altri lavori AOT/linker sono ora pianificati per EF Core 6.0.
Sono disponibili indicazioni utili per l'uso di EF Core nelle applicazioni Web tradizionali simili a MVC. Le linee guida per altre piattaforme e modelli di applicazione sono mancanti o non aggiornate. Per EF Core 5.0, si prevede di analizzare, migliorare e documentare l'esperienza dell'uso di EF Core con:
- Blazor
- Xamarin, incluso l'uso della storia AOT/linker
- WinForms/WPF/WinUI e possibilmente altri framework U.I.
Si tratta probabilmente di molti piccoli miglioramenti in EF Core, insieme alle linee guida e alle collaborazioni a lungo termine con altri team per migliorare le esperienze end-to-end che vanno oltre solo EF.
Aree specifiche che si prevede di esaminare sono:
- Distribuzione, inclusa l'esperienza per l'uso degli strumenti di Entity Framework, ad esempio per le migrazioni
- Modelli di applicazione, inclusi Xamarin e Blazor e probabilmente altri
- Esperienze SQLite, tra cui l'esperienza spaziale e la ricompilazione delle tabelle
- AOT e collegamento di esperienze
- Integrazione della diagnostica, inclusi i contatori delle prestazioni
Prestazioni
Sviluppatore responsabile: @roji
Rilevati da problemi etichettati con area-perf
nell'attività cardine 5.0
T-shirt size: L
Stato: ambito/operazione completata
Definizione dell'ambito: sono stati completati miglioramenti principali delle prestazioni nel provider Npgsql. Altre prestazioni sono ora pianificate per EF Core 6.0.
Per EF Core, si prevede di migliorare la suite di benchmark delle prestazioni e di apportare miglioramenti diretti alle prestazioni al runtime. Si prevede inoltre di completare la nuova API di invio in batch ADO.NET che è stata prototipo durante il ciclo di rilascio 3.0. Inoltre, a livello di ADO.NET, vengono pianificati miglioramenti aggiuntivi delle prestazioni per il provider Npgsql.
Come parte di questo lavoro si prevede anche di aggiungere ADO.NET/EF contatori delle prestazioni core e altre diagnostica in base alle esigenze.
Documentazione sull'architettura/collaboratore
Documenter lead: @ajcvickers
Tracciata dal numero 1920
T-shirt size: L
Stato: Taglia
L'idea è quella di semplificare la comprensione di ciò che sta succedendo negli interni di EF Core. Questo può essere utile per chiunque usi EF Core, ma la motivazione principale è rendere più semplice per gli utenti esterni:
- Contribuire al codice di EF Core
- Creare provider di database
- Creare altre estensioni
Aggiornamento: Purtroppo questo piano era troppo ambizioso. Crediamo ancora che questo sia importante, ma purtroppo non atterrerà con EF Core 5.0.
Documentazione di Microsoft.Data.Sqlite
Documenter lead: @bricelam
Tracciato da #1675
T-shirt size: M
Stato: completato. La nuova documentazione è disponibile in Microsoft Learn.
Il team ef possiede anche il provider di ADO.NET Microsoft.Data.Sqlite. Microsoft prevede di documentare completamente questo provider come parte della versione 5.0.
Documentazione generale
Documenter lead: @ajcvickers
Rilevati dai problemi nel repository della documentazione nell'attività cardine 5.0
T-shirt size: L
Stato: in corso
È già in corso il processo di aggiornamento della documentazione per le versioni 3.0 e 3.1. Stiamo lavorando anche su:
- Una revisione degli articoli introduttivi per renderli più avvicinabili/più facili da seguire
- Riorganizzazione degli articoli per semplificare la ricerca e l'aggiunta di riferimenti incrociati
- Aggiunta di altri dettagli e chiarimenti agli articoli esistenti
- Aggiornamento degli esempi e aggiunta di altri esempi
Correzione di bug
Rilevati da problemi etichettati con type-bug
nell'attività cardine 5.0
Sviluppatori: @roji, @maumar, @bricelam, @smitpatel, @AndriySvyryd@ajcvickers
T-shirt size: L
Stato: in corso
Al momento della stesura di questo articolo, sono stati risolti 135 bug nella versione 5.0 (con 62 già corretti), ma c'è una sovrapposizione significativa con la sezione Miglioramenti generali delle query precedente.
La frequenza in ingresso (problemi che terminano come lavoro in un'attività cardine) è stata di circa 23 problemi al mese nel corso della versione 3.0. Non tutti questi elementi dovranno essere corretti nella versione 5.0. Come stima approssimativa, si prevede di risolvere altri 150 problemi nell'intervallo di tempo di 5,0.
Piccoli miglioramenti
Rilevati da problemi etichettati con type-enhancement
nell'attività cardine 5.0
Sviluppatori: @roji, @maumar, @bricelam, @smitpatel, @AndriySvyryd@ajcvickers
T-shirt size: L
Stato: Operazione completata
Oltre alle funzionalità più grandi descritte in precedenza, abbiamo anche molti miglioramenti più piccoli pianificati per la 5.0 per correggere i "tagli di carta". Si noti che molti di questi miglioramenti sono trattati anche dai temi più generali descritti in precedenza.
Sotto la riga
Rilevati da problemi etichettati con consider-for-next-release
Si tratta di correzioni di bug e miglioramenti non attualmente pianificati per la versione 5.0, ma verranno esaminati come obiettivi di estensione a seconda dello stato di avanzamento del lavoro precedente.
Inoltre, consideriamo sempre i problemi più votati durante la pianificazione. Il taglio di questi problemi da una versione è sempre doloroso, ma è necessario un piano realistico per le risorse disponibili.
Suggerimenti
I commenti e i suggerimenti dei clienti sulla pianificazione sono importanti. Il modo migliore per indicare l'importanza di un problema consiste nel votare (Pollice in su) per tale problema in GitHub. Questi dati verranno quindi inseriti nel processo di pianificazione per la versione successiva.