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
Organizzare il codice JavaScript utilizzando i moduli
Gestire errori funzionali tramite exception in ASP.NET Core Web API
Eseguire attività pianificate con Azure Container Jobs
3 metodi JavaScript che ogni applicazione web dovrebbe contenere
Sfruttare l'output cache di ASP.NET Core 7 con i controller
Le novità di .NET 7 e C# 11
Specificare il numero di parentesi graffe nella string interpolation in combinazione con i string literal in C#
Utilizzare l'operatore GroupBy come ultima istruzione di una query LINQ in Entity Framework
Installare le Web App site extension tramite una pipeline di Azure DevOps
3 metodi JavaScript che ogni applicazione web dovrebbe contenere - Parte 2
Monitorare i server on-premises con Azure Arc
Applicare il versioning ai nostri endpoint ASP.NET Core Minimal API
I più letti di oggi
- Creare dei grafici con OWC
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Prima beta pubblica per il SP1 del .NET Framework 3.5 e VS 2008
- Speciale ADO.NET: accesso ai dati con il .NET Framework
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare la direttiva ngSrc di AngularJS per ottimizzare il caricamento delle immagini
- Utilizzare i collapse di Bootstrap 4
- Caricare i dati di configurazione allo startup di un'applicazione Angular