J'ai lu de nombreux articles sur la manière de résoudre ce problème, tous liés à CTP4, ou ajoutant mes propres méthodes d'extension.
Existe-t-il un moyen "officiel" inclus dans EF4 d'utiliser des expressions lambda à l'intérieur include (pour les relations de premier niveau ainsi que pour les niveaux 2e et plus) ou est-il éventuellement non inclus dans le RTM?
Il y en a un - je serais heureux d'apprendre comment le faire, car utiliser maintenant l'expression lambda dans mon code (avec # system.data.entity # system.data.linq) me donne toujours:
Impossible de convertir l'expression lambda en type 'chaîne' car il ne s'agit pas d'un type de délégué sur:
var customers = from c in
context.Customers.Include(c=>c.Phone)
La version RTM d’Entity Framework 4.1 inclut en fait méthodes d’extension dans le EntityFramework.dll
fichier, pour un chargement rapide avec lambda via la fonction Include
. Incluez simplement le DLL dans votre projet et vous devriez être capable d’écrire du code comme:
var princesses1 = context.Princesses.Include(p => p.Unicorns).ToList();
N'oubliez pas d'ajouter une instruction Import/Using pour inclure l'espace de noms System.Data.Entity . Sinon, le compilateur ne peut pas trouver les méthodes d'extension. Par exemple:
using System.Data.Entity;
Voir cet article blog de l'équipe ADO.NET pour plus d'informations.
Bien que cela soit impliqué dans la question, pour tous les autres qui ont le même problème où ils ne peuvent pas utiliser lambdas avec .Include, assurez-vous que vous avez ceci:
using System.Data.Entity;
Non, il n'y a pas de support officiel pour Inclure avec l'expression lambda dans RTM pour le moment. J'utilise this .
Lorsque nous parlons de CTP4, nous entendons Entity Framework Feature. C'est une API plus récente que EF4. Il comprend principalement Code First et quelques autres améliorations.