2011-03-10 4 views
22

J'utilise EF4 dans une application MVC3 et je cherchais un moyen de voir tous mes contacts dans un groupe de travail donné. Dans le contrôleur I spécifié:Linq-to-Entities Inclure la méthode non trouvée

var wg = from w in _repo.Workgroups.Include("Contact").ToList(); 

mais je reçois l'erreur suivante:

'System.Linq.IQueryable' does not contain a definition for 'Include' and no extension method 'Include' accepting a first argument of type 'System.Linq.IQueryable' could be found (are you missing a using directive or an assembly reference?)

Je croyais que cette méthode a été construite en EF4. Est-ce que je l'ai activé en quelque sorte?

Répondre

16

Oui, la méthode est intégrée dans EF, mais elle n'est pas disponible sur l'interface IQueryable. Il est disponible au ObjectQuery. Si vous souhaitez l'appeler au IQueryable, vous devez créer votre propre extension qui convertira la requête actuelle en ObjectQuery et exécutera Include. Quelque chose comme:

public static IQueryable<T> Include<T>(this IQueryable<T> query, string property) 
{ 
    var objectQuery = query as ObjectQuery<T>; 
    if (objectQuery == null) 
    { 
    throw new NotSupportedException("Include can be called only on ObjectQuery"); 
    } 

    return objectQuery.Include(property); 
} 

Ou vous devez utiliser Entity Framework Feature CTP5 où ces extensions sont déjà disponibles.

80

J'ai aussi obtenir cette erreur et résolu en ajoutant la référence suivante:

using System.Data.Entity; 
+0

Je ne peux pas croire que c'était si facile après avoir passé autant de temps à essayer de le comprendre. Merci @BruceHill –

+0

Je ne pouvais pas croire à quel point la solution était facile, et que personne n'avait donné cette réponse à une question qui avait plus d'un an à l'époque. Donc, pas de problème, Adrian. Content que je puisse aider. – BruceHill

+4

Cela fonctionne pour Entity Framework 5 et supérieur. –

10

La réponse de Bruce Hill est tout à fait raison.

Juste pour développer un peu sa réponse, les méthodes Include sont des méthodes d'extension dans l'espace de noms System.Data.Entity.

Cela n'affecte pas la façon dont vous les utilisez, mais les méthodes Include sont définies dans une classe statique nommée DbExtensions. Sur msdn.microsoft.com, vous les verrez documentés ici, pas sous System.Linq.IQueryable, ce qui les rendra un peu plus difficiles à trouver.

0

Si ce problème provient d'une procédure stockée, assurez-vous que le SP fonctionne correctement. Entity Framework tentera de prédire le type de valeur renvoyée par la procédure stockée et, si le SP ne fonctionne pas en raison d'un nom ou d'une colonne Table invalide, il renvoie un entier et Entity Framework crée un schéma conceptuel qui attend un entier comme valeur de retour au lieu d'une table.

Questions connexes