Ottimizzazione delle subquery in Entity Framework Core

di Stefano Mostarda, in LINQ, Entity Framework,

Il provider LINQ di Entity Framework Core non è ancora molto potente, ma migliora a ogni nuovo rilascio. Uno dei problemi più spinosi del provider è che in alcuni casi risolve le query utilizzando la tecnica 1+N che rischia di compromettere seriamente le performance della nostra applicazione e del database in generale. Prendiamo come esempio la seguente query.

var query = context.Orders.Select(
    c => c.Details.Where(o => o.Amount > 50).Select(o => o.Amount));

In questo caso, Entity Framework Core effettua una query per tirare fuori gli ordini che corrrispondono ai criteri di ricerca, e poi per ogni ordine, esegue una query per i dettagli. Questo significa che se la query estrae 20 ordini, effettua 21 query sul database. Per prevenire qusto problema, a partire da Entity Framework Core 2.1 possiamo ricorrere al metodo ToList nella subquery che specifica al provider che vogliamo caricare la subquery utilizzando n unico comando SQL.

var query = context.Orders.Select(
    c => c.Details.Where(o => o.Amount > 50).Select(o => o.Amount).ToList());

In questo modo, Entity Framework Core effettua una query per gli ordini e una per tutti i dettagli riducendo così il numero di query da 21 a 2.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi