53 votes

Entity Framework Include() fortement typé

Existe-t-il un moyen de rendre cette méthode fortement typée en utilisant la méthode System.Data.Entity.Include ? Dans la méthode ci-dessous, Escalation est une ICollection<>.

public IEnumerable<EscalationType> GetAllTypes() {
  Database.Configuration.LazyLoadingEnabled = false;
  return Database.EscalationTypes
    .Include("Escalation")
    .Include("Escalation.Primary")
    .Include("Escalation.Backup")
    .Include("Escalation.Primary.ContactInformation")
    .Include("Escalation.Backup.ContactInformation").ToList();
}

100voto

MartinF Points 1525

Ceci est déjà disponible dans Entity Framework 4.1.

Vous trouverez ici une référence sur la façon d'utiliser la fonction d'inclusion, qui montre également comment inclure plusieurs niveaux : http://msdn.microsoft.com/en-us/library/gg671236(VS.103).aspx

Le système fortement typé Include() est une méthode d'extension, vous devez donc vous rappeler de déclarer la méthode using System.Data.Entity; déclaration.

7voto

Nathan Taylor Points 13582

Le mérite revient à Joe Ferner :

public static class ObjectQueryExtensionMethods {
  public static ObjectQuery<T> Include<T>(this ObjectQuery<T> query, Expression<Func<T, object>> exp) {
    Expression body = exp.Body;
    MemberExpression memberExpression = (MemberExpression)exp.Body;
    string path = GetIncludePath(memberExpression);
    return query.Include(path);
  }

  private static string GetIncludePath(MemberExpression memberExpression) {
    string path = "";
    if (memberExpression.Expression is MemberExpression) {
      path = GetIncludePath((MemberExpression)memberExpression.Expression) + ".";
    }
    PropertyInfo propertyInfo = (PropertyInfo)memberExpression.Member;
    return path + propertyInfo.Name;
  }
}

ctx.Users.Include(u => u.Order.Item)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X