Entity Framework Core è produttivo, ma alcune abitudini possono trasformare una pagina veloce in una lenta. Ecco i consigli che applichiamo in ogni progetto.
1. Leggi solo ciò che serve
var elenco = await db.Prodotti
.Where(p => p.Attivo)
.Select(p => new ProdottoRiga(p.Id, p.Nome, p.Prezzo))
.ToListAsync();
2. AsNoTracking per le letture
Se non devi modificare le entità, AsNoTracking() evita il costo del change tracker.
3. Attenzione al problema N+1
Caricare una lista e poi accedere a una relazione dentro un ciclo genera una query per riga. Usa Include o, meglio, una proiezione che porti con sè i dati correlati.
4. Query divise per più collezioni
Includere più collezioni nella stessa query moltiplica le righe restituite. AsSplitQuery() le carica con query separate.
5. Paginazione sempre lato database
var pagina = await db.Ordini
.OrderByDescending(o => o.Data)
.Skip((numero - 1) * dimensione)
.Take(dimensione)
.ToListAsync();
6. Aggiornamenti in blocco
await db.Sessioni
.Where(s => s.Scadenza < DateTime.UtcNow)
.ExecuteDeleteAsync();
7-10. Le altre abitudini
- Indici sulle colonne usate in filtri e ordinamenti: nessun ORM compensa un indice mancante.
- Query compilate per le interrogazioni più frequenti.
- Pool dei DbContext con
AddDbContextPoolnelle applicazioni ad alto traffico. - Guarda l'SQL generato:
ToQueryString()e il logging dei comandi mostrano cosa arriva davvero al database.
Commenti (0)
Nessun commento ancora.