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
Utilizzare i variable font nel CSS
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Creare una libreria CSS universale: Immagini
Implementare il throttle in JavaScript
Autenticazione di git tramite Microsoft Entra ID in Azure DevOps
Disabilitare le run concorrenti di una pipeline di Azure DevOps
Ottimizzare le pull con Artifact Cache di Azure Container Registry
Esporre un server MCP con Azure API Management
Simulare Azure Cosmos DB in locale con Docker
Escludere alcuni file da GitHub Secret Scanning
Fornire parametri ad un Web component HTML
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database


