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
Utilizzo del persistent state di Blazor nel prerendering
Gestione dei prompt file a livello di organizzazione aziendale in GitHub
Gestire codice JavaScript con code splitting e lazy loading
Pubblicare un MCP Server in GitHub MCP Registry
Ottimizzare i costi con Smart tier in Azure Blob Storage
Impostare automaticamente l'altezza del font tramite CSS
.NET Aspire per applicazioni distribuite
Introduzione a GitHub Copilot CLI
Gestione opzioni colonna nella Blazor QuickGrid
Utilizzare Hybrid Cache in .NET 9
Disabilitare le run concorrenti di una pipeline di Azure DevOps
Gestire trasferimenti cloud con Azure Storage Mover




