La novità principale di Entity Framework Core 3 è la completa riscrittura del provider LINQ. Questa riscrittura ha comportato alcuni cambiamenti sulla compilazione e sull'esecuzione della query. Innanzitutto, sono supportati molti più metodi e molti più pattern rispetto alla versione precedente.
Inoltre, è stato modificato il modo di eseguire query che necessitano di una valutazione lato client. Fino alla versione 2.2, se il provider incontra un pattern che non può tradurre in SQL, allora scarica i dati sul client e continua l'esecuzione della query in memoria. Oltre a fare questo, il provider emette un warning che possiamo intercettare per sollevare un'eccezione. Con la nuova versione, il provider solleva direttamente un'eccezione a runtime.
Questo significa che il seguente codice che con la versione 2.2 non genera errori ma scarica tutto in memoria, con la versione 3.0 genera un'eccezione.
var sc = ctx.People .Where(c => IsItalian(c));
L'unico caso in cui questo pattern è ancora supportato è nella Select finale di una query.
Un altro cambiamento importante è nel modo di eseguire le query che usano l'eager loading. Fino alla versione 2.2, nei casi in cui si vuole precaricare una lista di entity il provider scompone la query in più query. Questo modo di eseguire la query LINQ ottimizza la banda, ma in alcuni casi causa problemi di 1+n e di incosistenza dei dati.
Per evitare questi problemi con la versione 3.0 del provider si è deciso di cambiare approccio e di fare in modo che ogni query LiNQ generi una sola query sul database utilizzando le JOIN. Nel caso in cui il provider non riesca a tradurre l'intera query LINQ in un comando SQL, il provider genera un'eccezione.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Generare velocemente pagine CRUD in Blazor con QuickGrid
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione
Creare alias per tipi generici e tuple in C#
Filtrare i dati di una QuickGrid in Blazor con una drop down list
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
Referenziare un @layer più alto in CSS
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
Utilizzare Tailwind CSS all'interno di React: installazione
Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
Effettuare il refresh dei dati di una QuickGrid di Blazor
I più letti di oggi
- Calcolare il resto di una divisione
- Realizzare un contatore di click
- Usare al meglio l'oggetto Cache di ASP.NET
- Utilizare la libreria subsink per eliminare le sottoscrizioni agli observable in Angular
- Aggiungere il controllo TabView come Microsoft Edge nella Universal Windows Platform
- Clonare un oggetto in .NET con la libreria JSON.NET