Je tente de créer une collection hiérarchique à l'aide de l'entité framework - voir la requête ci-dessous - chaque membre d'une entreprise donnée a un membre parent - mais en essayant d'exécuter cela, je reçois l'exception suivante:
System.NotsupportedException: le type "Membre" apparaît dans deux structurellement Initialisations incompatibles dans un Single Linq aux entités Requête. Un type peut être initialisé à deux endroits de la même requête, mais seulement si la même chose Les propriétés sont définies dans les deux endroits et Ces propriétés sont définies dans le même ordre. p> blockQuote>
Si je supprimais le parent membre Attribuez, il fonctionne - des idées sur ce qui se passe? p>
xxx pré> p>
3 Réponses :
Je n'ai pas essayé cela, mais le message d'erreur vous donne un indice: vous ne définissez pas les mêmes propriétés dans le même ordre dans les deux endroits. P>
Que se passe-t-il si vous essayez de définir une propriété d'identification sur le membre extérieur ()? P>
Je viens de mettre à jour le code dans la question pour refléter le code actuel - j'ai exactement les mêmes propriétés définies dans le même ordre, à l'exception de la définition de la propriété parentmember du parent, si cela est logique.
En fait, vous ne définissez toujours pas tous les mêmes paramètres: l'extérieur a le nom et la parentmember, tandis que vous définissez uniquement le nom de l'intérieur. Essayez d'attribuer à la propriété une null.
Vous vous retrouverez avec une récursion des enregistrements des membres lorsque vous essayez de récupérer les mêmes champs de chacun. Vous ne pouvez pas simplement faire le dernier enregistrement de parent égal à NULL.
Je récupérerais ce que je pouvais, puis construit l'enregistrement avec d'autres requêtes. Notez que l'entité de votre entreprise nécessitera un champ parentid ou similaire. P> MAINTER et Ajouter dans les enregistrements parent. P> foreach (var member in members)
{
member.ParentMember = new Member
{
Name = _Entities.Company.First(c => c.Id == member.ParentId).Name
};
}
Essayez
+1 Cette situation de Catch-22 mordit juste, et c'était la solution que j'ai proposée de manière indépendante. Moins élégant que j'espérais, et un peu de gaspillage, puisque nous devons faire doubler l'instanciation de l'objet, mais néanmoins efficace.