Linq to entities "Seulement les types primitifs ou une énumération des types sont pris en charge' Erreur
Je suis en utilisant LinqPad pour tester ma requête. Cette requête fonctionne lorsque la LInqPad connexion à ma base de données (LInq to SQL) mais il ne fonctionne pas lorsque je change la connexion à utiliser mon Entity Framework 5 Model.dll. (Linq to Entité). C'est en C#.
J'ai deux tables, appelé Plan et PlanDetails. La relation est un Plan à de nombreux PlanDetails.
var q = from pd in PlanDetails
select new {
pd.PlanDetailID,
ThePlanName = (from p in this.Plans
where p.PlanID == pd.PlanID
select p.PlanName)
};
var results = q.ToList();
q.Dump(); //This is a linqpad method to output the result.
J'ai cette erreur "NotSupportedException: Impossible de créer une valeur constante de type 'Domaine.Les données.Plan". Seuls les types primitifs ou une énumération des types de prises en charge dans ce contexte." Des idées pourquoi cela ne fonctionne qu'avec Linq to SQL?
OriginalL'auteur duyn9uyen | 2013-03-23
Vous devez vous connecter pour publier un commentaire.
fondamentalement, cela signifie que vous utilisez certains complexes de type de données à l'intérieur de la requête aux fins de comparaison.
dans votre cas, je soupçonne
from p in this.Plans where p.PlanID == pd.PlanID
est le coupable.Et il dépend de DataProvider. Il peut travailler pour Sql Fournisseur de Données, mais pas pour SqlCE Fournisseur de données et ainsi de suite.
ce que vous devez faire est de convertir votre
this.Plans
collection dans un type primitif de la collection contenant uniquement l'Id c'est à direet d'utiliser ensuite cette liste à l'intérieur.
exactement, il n'a pas besoin de faire de l'état, mais à cause de cette erreur.
Merci! J'ai été jouer avec les objectifs EF et cela a aussi du sens. Je vais essayer cela sur deux non-entités liées.
OK avec moi, mais si cela résout l'erreur dans la main, il ne l'explique pas. C'est un Linqpad glitch, selon la façon dont vous le regardez.
Ce n'est pas un Linqpad glitch, ou ce n'est pas seulement un linqqpad problème, essayez de le même code avec un .sdf fichier en tant que votre source de données, de sorte que, quelle que soit la raison, la solution est d'extraire de votre comparaison des valeurs dans une autre primitive de la liste et utilisez cette liste à l'intérieur. :).
OriginalL'auteur Manish Mishra
C'est un Linqpad bug si vous aimez (ou une particularité). J'ai trouvé comportement similaire en moi-même. Comme moi, vous pourriez trouver que votre requête fonctionne avec une
ObjectContext
, mais pas unDbContext
. (Et ça marche dans Visual Studio).Je pense que cela a à voir avec Linqpad de la structure intérieure. Il ajoute
MergeAs (AppendOnly)
pour les collections, et le contexte est unUserQuery
, qui contient probablement un peu de code qui provoque ce bug.Ceci est confirmé par le fait que le code ne de travail lorsque vous créez une nouvelle instance de contexte dans le Linqpad code et exécuter la requête à l'encontre de cette instance.
OriginalL'auteur Gert Arnold
Si la relation existe déjà.
Pourquoi ne pas tout simplement dire.
Bien sûr, je suis en supposant que chaque PlanDetail appartient à un Plan.
Mise à jour
Pour obtenir de meilleurs résultats de LinqPad vous pourriez dire à l'utilisation de votre propre assemblée (qui contient votre DbContext) au lieu de la valeur par défaut Datacontext il utilise.
OriginalL'auteur scartag
J'ai eu cette erreur quand j'ai essayé de nulle vérifier pour la navigation de la propriété dans le cadre de l'entité expression
J'ai résolu cela en n'utilisant pas la pas la valeur null vérifier dans l'expression, ainsi que l'utilisation de Toute fonction ().
Espère que cela aide quelqu'un!
OriginalL'auteur Ram