Creare un metodo Include tipizzato per caricare in maniera sicura grafi di oggetti

di Stefano Mostarda, in LINQ, Entity Framewokr,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

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