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.
Entity Framework Core usa LINQ (Language Integrated Query) per eseguire query sui dati dal database. LINQ consente di usare C# (o il linguaggio .NET preferito) per scrivere query fortemente tipate in base al contesto derivato e alle classi di entità.
Annotazioni
Questo articolo non è aggiornato e alcune parti di esso devono essere aggiornate per tenere conto delle modifiche apportate nella progettazione della pipeline di query. Se avete dubbi su qualsiasi comportamento menzionato qui, si prega di porre una domanda.
Il ciclo di vita di una query
La descrizione seguente è una panoramica generale del processo attraverso cui passa ogni query.
- La query LINQ viene elaborata da Entity Framework Core per compilare una rappresentazione pronta per l'elaborazione da parte del provider di database
- Il risultato viene memorizzato nella cache in modo che questa elaborazione non debba essere eseguita ogni volta che viene eseguita la query
- Il risultato viene passato al provider di database
- Il provider di database identifica le parti della query che possono essere valutate nel database
- Queste parti della query vengono convertite in un linguaggio di query specifico del database (ad esempio, SQL per un database relazionale)
- Viene inviata una query al database e il set di risultati restituito (i risultati sono valori del database, non delle istanze di entità)
- Per ogni elemento nel set di risultati
- Se la query è una query di rilevamento, Entity Framework controlla se i dati rappresentano già un'entità nello strumento di rilevamento delle modifiche per l'istanza di contesto
- In tal caso, viene restituita l'entità esistente
- In caso contrario, viene creata una nuova entità, viene configurato il rilevamento delle modifiche e viene restituita la nuova entità
- Se la query è una query senza rilevamento, viene sempre creata e restituita una nuova entità
- Se la query è una query di rilevamento, Entity Framework controlla se i dati rappresentano già un'entità nello strumento di rilevamento delle modifiche per l'istanza di contesto
Quando vengono eseguite le query
Quando chiami gli operatori LINQ, stai semplicemente costruendo una rappresentazione in memoria della query. La query viene inviata al database solo quando vengono utilizzati i risultati.
Le operazioni più comuni che comportano l'invio della query al database sono:
- Iterare i risultati in un ciclo
for - Uso di un operatore come
ToList,ToArray,Single,Count, o gli overload asincroni equivalenti
Avviso
Convalida sempre l'input dell'utente: Anche se EF Core protegge dagli attacchi SQL injection usando parametri e valori letterali di escape nelle query, non convalida gli input. La convalida appropriata, in base ai requisiti dell'applicazione, deve essere eseguita prima che i valori delle origini non attendibili vengano usati nelle query LINQ, assegnate alle proprietà dell'entità o passate ad altre API di EF Core. Sono inclusi tutti gli input utente usati per costruire in modo dinamico le query. Anche quando si usa LINQ, se si accetta l'input dell'utente per compilare espressioni, è necessario assicurarsi che sia possibile costruire solo le espressioni desiderate.