92 votes

Utilisation d'Include dans Entity Framework 4 avec des expressions lambda

J'ai vu de nombreux articles sur la façon de surmonter ce problème, tous liés à CTP4, ou en ajoutant mes propres méthodes d'extension.

Existe-t-il un moyen "officiel" d'utiliser les expressions lambda dans les inclusions (pour les relations de premier niveau, mais aussi de second niveau et plus) dans EF4 ou est-ce que cela n'a pas été inclus dans la version RTM ?

S'il en existe un, je serais heureux d'apprendre comment le faire, car l'utilisation d'une expression lambda dans mon code actuel (avec #system.data.entity #system.data.linq) me donne toujours des résultats :

Impossible de convertir une expression lambda en type 'string' car ce n'est pas un type de délégué sur :

var customers = from c in
context.Customers.Include(c=>c.Phone)

1 votes

Non, il n'existe pas (à part CTP4 - comme vous le dites). J'utilise des méthodes d'extension/enums pour obtenir la sécurité de type.

0 votes

Je l'ai fait aussi, donc MS l'a inclus dans la CTP4 et l'a supprimé dans la RTM ?

239voto

cecilphillip Points 4020

La version RTM d'Entity Framework 4.1 comprend en fait méthodes d'extension dans le EntityFramework.dll pour un chargement rapide avec lambda par le biais du fichier Include fonction. Il suffit d'inclure la DLL dans votre projet et vous devriez être en mesure d'écrire du code comme :

var princesses1 = context.Princesses.Include(p => p.Unicorns).ToList();

N'oubliez pas d'ajouter une déclaration d'importation ou d'utilisation pour inclure l'élément System.Data.Entity espace de noms. Sinon, le compilateur ne peut pas trouver les méthodes d'extension. Par exemple

using System.Data.Entity;

Voir ceci Blog de l'équipe ADO.NET pour plus d'informations.

1 votes

Si le lien vers le blog d'ADO.net est toujours pertinent, la référence/guide EF6 pour le même sujet l'est : Chargement des entités connexes Je pense que la documentation doit passer aux exemples de princesse et de licorne au lieu des exemples de blog et de poste qu'ils utilisent partout.

1 votes

Merci, je viens d'ajouter l'utilisation de System.Data.Entity ; cela me convient.

0 votes

Le lien du blog de l'équipe est mort, c'est le nouvel emplacement

91voto

AaronLS Points 12720

Bien que cela soit implicite dans la question, pour tous ceux qui ont le même problème et ne peuvent pas utiliser les lambdas avec .Include, assurez-vous que vous avez ceci :

using System.Data.Entity;

5voto

Ladislav Mrnka Points 218632

Non, il n'y a pas de support officiel pour Include avec lambda expression dans la RTM pour le moment. J'utilise este .

Lorsque nous parlons de CTP4, nous voulons dire Entity Framework Feature. Il s'agit d'une API plus récente que EF4. Elle comprend principalement Code First et quelques autres améliorations.

0 votes

Savez-vous quand MS va supporter cette fonctionnalité ? Je comprends que toutes ces méthodes d'extension ont un problème de performance avec les objets de grande taille / multi-niveaux - car elles doivent traverser encore et encore chaque appel pour l'inclusion, et alors que l'arbre de "définition" de l'objet est constant et peut être mis en cache, il n'y a pas encore de solution de ce type.

0 votes

La fonctionnalité Entity Framework est actuellement en CTP5. Je pense que la version RTM devrait être publiée au cours du premier trimestre de 2011. J'espère qu'elle contiendra l'inclusion de l'expression lambda, mais je n'ai pas encore vérifié sa mise en œuvre et je ne peux donc pas dire si elle utilise une sorte de mise en cache.

31 votes

Cette réponse est fausse à partir de EF 4.3.x. Les autres réponses sont correctes, il faut avoir en utilisant System.Data.Entity pour obtenir la surcharge avec les expressions lamda.

4voto

Yevgeniy Points 21

Un bon article à propos des expressions lambda dans la méthode include

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