2009-10-02 4 views
0

J'ai cette fonctionméthode entité Ado.net de .include() ne fonctionne pas

public static AdoEntity.Inspector GetInspectorWithInclude(int id, List<string> properties) 
    { 
     using (var context = new Inspection09Entities()) 
     { 
      var query = context.Inspector; 
      if (properties != null) 
      { 
       foreach (var prop in properties) 
       { 
        if (!string.IsNullOrEmpty(prop)) 
         query.Include(prop); 
       } 
      } 
      return query.Where(i => i.ID == id).First(); 
     } 
    } 

que j'utiliser pour obtenir mes « inspecteurs » de la DB et une caractéristique supplémentaire de préciser quoi « Inclure » avec les données. Donc, il prend une liste 'string'> <> et les inclut avec la requête. Cette fonction ne semble pas fonctionner car l'objet retourné n'inclut toujours pas les données demandées. Quelqu'un pourrait-il me dire ce qui ne va pas avec cette méthode/approche.

Merci d'avance.

Solution

Merci à Misha N. suggestion, j'ai éclos cette aide de EF qui étend la classe ObjectQuery. Espérons que d'autres pourront le trouver utile.

/// <summary> 
/// The include extesion that takes a list and returns a object query with the included data. 
/// </summary> 
/// <param name="objectQuery"> 
/// The object query. 
/// </param> 
/// <param name="includes"> 
/// The list of strings to include. 
/// </param> 
/// <typeparam name="T"> 
/// </typeparam> 
/// <returns> 
/// An object query of T type with the included data. 
/// </returns> 
public static ObjectQuery<T> Include<T>(this ObjectQuery<T> objectQuery, List<string> includes) 
{ 
    ObjectQuery<T> query = objectQuery; 
    if (includes != null) includes.ForEach(s => { if (!string.IsNullOrEmpty(s)) query = query.Include(s); }); 

    return query; 
} 

Exemple d'utilisation.

using(var context = new MyEntity()) 
{ 
    var includes = new List<string> 
    { 
     "Address", 
     "Orders", 
     "Invoices" 
    } 
    return context.CustomerSet.Include(includes).First(c => c.ID == customerID); 
} 

Répondre

3

Rien ne va pas avec votre approche, juste une petite chose doivent être changé:

public static AdoEntity.Inspector GetInspectorWithInclude(int id, List<string> properties) 
{ 
    using (var context = new Inspection09Entities()) 
    { 
     var query = context.Inspector; 
     if (properties != null) 
     { 
      foreach (var prop in properties) 
      { 
       if (!string.IsNullOrEmpty(prop)) 
        query = query.Include(prop);// <--- HERE 
      } 
     } 
     return query.Where(i => i.ID == id).First(); 
    } 
} 

méthode ObjectQuery.Include() retourne l'objet ObjectQuery modifié, vous n'avez pas fait des changements à la requête initiale.

Espérons que cela aide

Questions connexes