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.