Il metodo Include della classe ObjectQuery<T> accetta in input una stringa che rappresenta la navigation property da caricare insieme all'entità principale. Il problema è che essendo il parametro una stringa, non ci si può rendere conto se questa è corretta fino a quando non viene eseguita l'applicazione.
Per ovviare a questo problema, possiamo creare un Extension Method che accetta una lambda che esprime la proprietà da caricare e che internamente recupera il nome della proprietà come stringa e la passa al metodo Include attuale.
public static ObjectQuery<T> Include<T, TProp>( this ObjectQuery<T> oq, Expression<Func<T, TProp>> expression) { var body = expression.Body as MemberExpression; if (body == null) throw new ArgumentException("Parameter expression must be a MemberExpression"); return oq.Include(body.Member.Name); }
Ora quando dobbiamo caricare un grafo di oggetti possiamo utilizzare il metodo Include nel seguente modo.
ctx.Orders.Include(o => o.OrderDetails);
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- Microsoft annuncia Windows "TrustBridge"
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Estrarre dati randomici da una lista di oggetti in C#
- Usare il colore CSS per migliorare lo stile della pagina
- Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione