Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Come descritto nel processo di pianificazione, sono stati raccolti input dagli stakeholder in un piano per Entity Framework Core 8 (EF Core 8) e altri processi di accesso ai dati .NET per l'intervallo di tempo .NET 8. Per brevità, EF Core 8 viene anche definito semplicemente EF8.
Importante
Questo piano non è un impegno; si evolverà man mano che continueremo a imparare in tutta la versione. Alcune cose non pianificate per EF8 potrebbero essere estratte. Alcune cose attualmente pianificate per EF8 potrebbero essere puntate.
Informazioni generali
EF Core 8 è la prossima versione dopo EF Core 7 ed è pianificata per il rilascio a novembre 2023, contemporaneamente a .NET 8. Non sono previsti piani per una versione di EF Core 7.1.
Piattaforme supportate
EF8 è attualmente destinato a .NET 6. Questo probabilmente verrà aggiornato a .NET 8 man mano che si avvicina la versione. EF8 non ha come destinazione alcuna versione di .NET Standard; per altre informazioni, vedere il futuro di .NET Standard. EF8 non verrà eseguito in .NET Framework.
EF8 sarà allineato a .NET 8 come versione di supporto a lungo termine (LTS). Per altre informazioni, vedere i criteri di supporto di .NET.
Modifiche di rilievo
EF8 conterrà un numero ridotto di modifiche di rilievo man mano che si continua a evolvere sia EF Core che la piattaforma .NET. Il nostro obiettivo è ridurre al minimo i cambiamenti di rilievo il più possibile senza ristagnare la piattaforma.
Temi
Gli investimenti di grandi dimensioni per EF8 e l'accesso ai dati in .NET 8 rientrano nei temi seguenti:
- Funzionalità altamente richieste
- Dispositivi nativi e cloud
- Prestazioni
- Strumenti visivi
- Esperienza sviluppatore
Ognuno di questi temi è descritto in dettaglio di seguito. È possibile tenere traccia dello stato generale di ogni tema nei Aggiornamenti di dati .NET. Commentare il problema #26994 di GitHub con eventuali commenti o suggerimenti.
Tema: funzionalità altamente richieste
Come sempre, un input importante nel processo di pianificazione proviene dai voti (👍) per le funzionalità in GitHub. In base a questi voti e all'input dell'utente, si prevede di lavorare sulle seguenti funzionalità altamente richieste per EF8.
Colonne JSON
Rilevati da problemi etichettati con 'area-json' e 'consider-for-current-release'
Proposta di valore: compilare il supporto JSON di EF7 per potenziare ulteriormente il modello ibrido relazionale/documento.
EF7 ha introdotto il mapping delle colonne JSON di SQL Server ai tipi di aggregazione nel modello EF, ma con alcune limitazioni. In EF8 si prevede di risolvere molte di queste limitazioni e di testare e migliorare le prestazioni. In EF7 il mapping JSON alle aggregazioni è limitato a SQL Server. In EF8 si prevede di portare il supporto a SQLite e collaborare con i proprietari di altri provider per allineare il supporto delle colonne JSON in tutti i provider.
Oggetti Valore
Rilevato dal problema n. 9906: Usare struct o classi C# come oggetti valore
Proposta di valore: le applicazioni possono usare oggetti valore di tipo DDD nei modelli EF.
In precedenza era la visualizzazione team che le entità di proprietà, destinate al supporto aggregato, sarebbero anche un'approssimazione ragionevole per gli oggetti valore. L'esperienza ha dimostrato che questo non è il caso. Pertanto, in EF8, si prevede di introdurre un'esperienza migliore incentrata sulle esigenze degli oggetti valore nella progettazione basata su dominio. Questo approccio si baserà sui convertitori di valori anziché sulle entità di proprietà.
Query SQL per tipi non mappati
Rilevato dal problema 10753: Supportare query SQL non elaborate senza definire un tipo di entità per il risultato
Proposta di valore: le applicazioni possono eseguire più tipi di query SQL senza eliminare ADO.NET o usare librerie di terze parti.
Attualmente le query SQL devono restituire un tipo nel modello o un tipo scalare. In EF8 si prevede di consentire le query SQL che restituiscono direttamente tipi non contenuti nel modello di Entity Framework.
Tema: Cloud nativo e dispositivi
EF Core viene spesso usato nelle applicazioni Web ASP.NET Core tradizionali. Ef Core, tuttavia, viene sempre più usato nei microservizi e nei dispositivi mobili. Questi ambienti in genere favoriscono dimensioni dell'applicazione più piccole, tempi di avvio più veloci e nessuna dipendenza dalla generazione di codice dinamico. Abbiamo migliorato notevolmente il taglio per le app EF Core in EF7 e prevediamo ulteriori investimenti in queste aree per EF8.
AOT e taglio con EF Core
Rilevati da problemi etichettati con 'area-aot' e 'consider-for-current-release'
Proposta di valore: applicazioni EF Core di piccole dimensioni e avvio rapido senza generazione di codice dinamico.
EF Core presenta diverse caratteristiche che rappresentano una sfida per le applicazioni compilate in anticipo (AOT):
- Uso del codice e della reflection imperativi dell'applicazione per individuare il modello e i mapping di Entity Framework
- Uso della reflection e dei tipi generati dinamicamente per le query e il rilevamento delle modifiche
- Codice generato dinamicamente per query LINQ arbitrarie create in modo imperativo
In EF8 si prevede di analizzare e creare un prototipo di queste aree per trovare un modo per ottenere AOT e trimming che mantenga l'esperienza utente corrente di EF Core.
AOT e taglio per ADO.NET
Proposta di valore: l'accesso ai dati di basso livello può essere usato nelle applicazioni native del cloud.
Tecnologie di accesso ai dati di livello superiore, ad esempio EF Core, usano provider di dati ADO.NET, ad esempio Microsoft.Data.SqlClient, Microsoft.Data.Sqlite e Npgsql. Per .NET 8, si garantisce che il provider Npgsql per PostgreSQL e il provider Microsoft.Data.Sqlite per SQLite funzionino completamente nelle applicazioni tagliate e compilate con AOT. Collaboreremo anche con gli autori di altri provider di dati ADO.NET per renderli AOT e semplici da tagliare.
Tema: Prestazioni
Le prestazioni ottimali sono fondamentali per tutte le funzionalità .NET, incluse sia l'accesso ai dati di EF Core che l'accesso ai dati di livello inferiore. Woodstar (vedere di seguito) sarà il push delle prestazioni principale nell'intervallo di tempo di .NET 8. Tuttavia, si prevede anche di lavorare sulle prestazioni in alcune altre aree, ad esempio nelle colonne JSON, come descritto in precedenza. Inoltre, il lavoro su AOT e taglio (vedere sopra) ha una forte relazione con le prestazioni.
Woodstar
Rilevato nel repository .NET Data Lab
Proposta di valore: accesso rapido e completamente gestito a SQL Server e Azure SQL per le applicazioni .NET.
Microsoft.Data.SqlClient è un provider di database ADO.NET completo per SQL Server. Supporta un'ampia gamma di funzionalità di SQL Server sia in .NET che in .NET Framework. Tuttavia, è anche una codebase grande e vecchia con molte interazioni complesse tra i relativi comportamenti. Ciò rende difficile sfruttare le funzionalità di prestazioni .NET più recenti, ad esempio pipeline. Presenta anche diversi problemi di prestazioni (in particolare per la lettura di dati di grandi dimensioni) che si sono rivelati molto difficili da risolvere.
Si prevede di investire in modo più pesante su Woodstar nell'intervallo di tempo di .NET 8. Il nostro obiettivo provvisorio è quello di eseguire il benchmark TechEmpower Fortunes usando Woodstar entro la fine della versione.
Importante
L'investimento in Microsoft.Data.SqlClient non cambia. Continuerà a essere il modo consigliato per connettersi a SQL Server e Azure SQL, sia con che senza EF Core. Continuerà a supportare le nuove funzionalità di SQL Server man mano che vengono introdotte.
Tema: Strumenti visivi
EF Core offre potenti strumenti da riga di comando multipiattaforma per migrazioni di database, reverse engineering e altro ancora. Inoltre, EF Core Power Tools offre un'esperienza visiva per alcuni di questi aspetti. Tuttavia, EF Core è praticamente assente dall'esperienza predefinita dell'interfaccia utente di Visual Studio. Nell'intervallo di tempo di .NET 8 si prevede di rendere gli strumenti di EF Core una parte incorporata dell'esperienza di Visual Studio.
Modelli T4 di prima classe in Visual Studio
Proposta di valore: sfruttare la creazione di modelli T4 in più aree in Visual Studio.
EF7 ha introdotto modelli T4 per lo scaffolding (reverse engineering) di un modello EF da un database esistente. Tuttavia, la modifica dei modelli T4 può essere difficile senza una buona esperienza nell'editor. Nell'intervallo di tempo di .NET 8 si prevede di offrire un'esperienza di modifica T4 migliore in Visual Studio in modo che possa essere usata sia per Entity Framework che per altri modelli.
EF Core Database First in Visual Studio
Proposta di valore: strumenti predefiniti per database in Visual Studio.
EF Core Power Tools offre un'esperienza visiva ottimale per gli strumenti di EF Core. Tuttavia, Power Tools non è installato automaticamente con Visual Studio e quindi può essere difficile da individuare. Nell'intervallo di tempo di .NET 8 si prevede di rendere facilmente individuabili gli strumenti di EF Core in Visual Studio. L'obiettivo principale di questo lavoro sarà lo scaffolding (reverse engineering) di un modello EF da un database esistente, altrimenti noto come "Database First", ma può includere anche altre aree.
Tema: Esperienza sviluppatore
La creazione di un'esperienza ottimale per gli sviluppatori è sempre stata una forza guida principale per il team. Quasi tutto nei temi descritti qui sopra si riferisce a questo in qualche modo. Inoltre, una parte importante del lavoro pianificato per EF8 implica il miglioramento dell'esperienza di sviluppo in molti modi piccoli in più aree.
Tutti i problemi che potrebbero essere utili per EF8 vengono rilevati in GitHub dall'etichetta "consider-for-current-release". Questi problemi verranno rivalutati in tutta la versione e verranno spostati i problemi nell'attività cardine 8.0 man mano che ci si impegna a lavorare su di essi. Assicurarsi di votare per questioni importanti per l'utente (👍) in modo da poter usare queste informazioni quando si decide quali problemi lavorare.
I problemi di GitHub di EF Core vengono tutti assegnati a una o più "aree". Le query seguenti presentano problemi di filtro da considerare per EF8 in base alle aree principali:
- Query
- Compilazione e metadati del modello
- Change tracking
- Prestazioni
- Migrazioni
- DbContext e api correlate
- Strumenti
- Provider Azure Cosmos
- Convenzioni di compilazione dei modelli
- Mapping relazionale specifico
- Provider SQL Server
- Savechanges
- Mapping da modello a database
- Provider SQLite
- Scaffolding (reverse engineering)
- Registrazione
- Proxy dinamici
- Mapping dei tipi
- provider SQLite ADO.NET
- Tabelle temporali
Suggerimenti
I commenti e i suggerimenti dei clienti sulla pianificazione sono importanti. Commentare il problema #29853 di GitHub con qualsiasi feedback o suggerimenti generali sul piano. Il modo migliore per indicare l'importanza di un problema consiste nel votare (👍) per il problema in GitHub. Questi dati verranno quindi inseriti nel processo di pianificazione per la versione successiva.