Una delle regole d'oro di EF Core è quella di non fare nulla che non sia stato esplicitato dallo sviluppatore. Un tipico caso in cui questa regola si applica è nelle query che recuperano un grafo di oggetti. Per fare un esempio, se vogliamo recuperare un ordine e i suoi dettagli, dobbiamo utilizzare il metodo Include per aggiungere i dettagli, altrimenti la query recupera solo l'ordine.
// recupera solo l'ordine ctx.Orders.First(c => c.Id == 1); // recupera ordine e dettagli ctx.Orders.Include(c => c.Details).First(c => c.Id == 1);
Tuttavia, esistono casi in cui vogliamo che quando recuperiamo una determinata entity, vengano recuperate in automatico anche una o più entity collegate. Nel nostro caso, potremmo dover recuperare i dettagli ogni volta recuperiamo un ordine. Aggiungere una chiamata a Include in ogni query è si fattibile, ma estremamente complesso nella sua realizzazione e manutenzione.
Per semplificare questi scenari, EF Core 6 introduce un nuovo metodo disponibile in fase di configurazione dell'entity: AutoInclude. Questo metodo si applica a una proprietà di navigazione e specifica che questa deve essere recuperata ogni qualvolta l'entity principale viene letta.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Order>().Navigation(c => c.Details).AutoInclude();
}Grazie a questa configurazione, la prossima query recupera sia l'ordine che i suoi dettagli.
// recupera l'ordine e i dettagli ctx.Orders.First(c => c.Id == 1);
Se in determinate query vogliamo disabilitare il comportamento automatico, possiamo farlo usando l'extension method IgnoreAutoIncludes.
ctx.Order .IgnoreAutoIncludes() .First(c => c.Id);
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
La gestione della riconnessione al server di Blazor in .NET 9
Utilizzare Hybrid Cache in .NET 9
Gestire progetti .NET + React in .NET Aspire
Eseguire query in contemporanea con EF
Recuperare automaticamente un utente e aggiungerlo ad un gruppo di Azure DevOps
Managed deployment strategy in Azure DevOps
Documentare i servizi REST con Swagger e OpenAPI con .NET 9
Configuratione e utilizzo .NET Aspire CLI
Escludere alcuni file da GitHub Copilot
Evidenziare una porzione di testo in un pagina dopo una navigazione
Ricevere notifiche sui test con Azure Load Testing
Gestire pubblicazione Kubernetes tramite .NET Aspire
I più letti di oggi
- Costruire il web del futuro con HTML5: la nostra guida rapida
- Utilizzare @property per animare nativamente un oggetto HTML tramite CSS
- Utilizzo delle stepped value functions nel CSS
- Disponibile al download la versione finale di Internet Explorer 9
- Impostare automaticamente l'altezza del font tramite CSS
- Disponibile Internet Explorer 10 Platform Preview 2 (IE10 PP2): ancora più supporto ad HTML5
- jQuery raggiunge la versione 1.7
- Rilasciato jQuery Mobile 1.0
- Miglioramenti agli screen reader e al contrasto in Angular
- Internet Explorer 10 Platform Preview 1 (IE10 PP1)


