Dans le cadre d'entité (spécifiquement EF 3.5, mais s'il existe dans EF 4, cela me donne une raison de mettre à niveau) est-il possible d'une charge paresseuse uniquement une partie d'une collection? J'approche peut aussi que ce problème aussi, alors je suis ouvert aux suggestions. Mes tables / entités ressemblent à ceci: J'ai une liste des objets code> de la personne code> extraits via une structure d'entité via une procédure stockée. J'ai une vue qui montre seulement un repas Le problème est-il en train de charger toute la collection. Constituée C'est une petite collection si le pire des cas, je peux tout charger, puis supprimer tout sauf celui dont j'ai besoin, mais c'est loin d'être idéal. De plus, je ne suis pas sûr que s'il serait possible sans déclencher aucun des événements de modification de la collection, car ils n'auraient pas dû être là-bas en premier lieu. P> P> code> à la fois, je ne veux donc que les informations relatives à ce repas. Actuellement, j'ai un code qui ressemble à ceci: p>
3 Réponses :
Dans ce cas, au lieu d'utiliser la méthode code> code>, vous pouvez simplement interroger la base de données pour vos données: Je suppose que dans cette requête Nous sélectionnons fondamentalement tout le personne. PERSONMEALS CODE> est une collection, sinon vous pouvez utiliser
FirstArdefault code> au lieu de
prendre code>. P>
PERSONNESSEALS CODE> ENTITÉS (Ensemble avec le
Repas Code>) qui ont l'identifiant de la personne en tant que personne actuelle dans la boucle et l'ID de repas que vous souhaitez. Si votre dB ne dispose pas de données corrompues (plusieurs lignes avec les mêmes combinaisons PAINT-PAINIDID), il y aura 0 ou 1 résultats, qui sera écrit dans votre propriété
PersonMeals code>. p> p>
Pas aussi élégant d'une solution que j'espérais, mais cela fonctionne.
La réponse de Yakimych devrait fonctionner, mais le code avait quelques erreurs.
La syntaxe correcte doit être: p> J'espère que cela aide. P> p>
Votre question était assez claire: est-il possible de Lazily forte> la charge seulement une partie d'une collection et la réponse est non! Pas dans EF1 ni dans EF4. BTW, si le dernier repas est le sujet, commencez à interroger par cela! Au lieu de récupérer la personne et un repas, récupérez les derniers repas et la personne attachée à elle. P>
Juste pour clarifier - EF ne fournit pas une méthode hors de la boîte à une partie de chargement paresseux d'une collection. Et la chargement paresseux signifie que la collection Repas Code> ne se chargée pas avec la personne
code>, mais plutôt un peu de temps après que les personnes
sont chargées. Ceci vous pouvez manifester clairement en interrogant pour les repas
code>, cependant. Ainsi, je n'établirais pas simplement que ce n'est pas possible.
Pourquoi la réponse est non? Je pense que l'équipe EF n'est pas difficile pour mettre en œuvre quelque chose pour résoudre ce problème.
Est-ce que
personne code> a une relation de plusieurs à plusieurs avec
personnantmeal code> et
personneMeal code> avoir une relation à plusieurs à plusieurs avec
repas code> comme indiqué dans votre question? Ou est-ce que
personne code> a plutôt une relation plusieurs à plusieurs avec
repas code>, tandis que la personne
personne code> est la table de connexion? Si tel est le cas, il ne devrait pas y avoir une entité générée pour
PersonneMeal code>. J'ai également remarqué un champ code> code>, cependant. Pourriez-vous clarifier un peu votre structure de données? Une capture d'écran de votre EDM pourrait être utile, ainsi que votre structure de base de données.
@Yakimych Tu as raison, c'est un M2M entre personne et repas avec la personne qui joue la table / entité de liaison.
@ Agent_9191 - OK, dans ce cas, il ne devrait s'agir que d'une table code> personnalisée code>, mais aucune entité générée. La personne code> personne code> doit avoir une collection de
Repas code> et l'entité code> code> doit avoir une collection de
personnes code>. Avez-vous généré votre modèle de la base de données ou la créez-vous dans le concepteur? Et quelle est la propriété code> code> pour (qui pourrait être la raison pour laquelle EF génère l'entité
personne code>)?
@Yakimych Il a été généré à partir de la base de données et l'entité personnelle est nécessaire car il existe des propriétés spécifiques à la combinaison (type de nourriture, de boisson, de vitamines, etc.). La valeur est l'une des propriétés génériques de la liste. La question de la plupart des points de vue des données ne nécessite qu'un seul repas à la fois pour une personne et comme je l'ai dit, la liste des personnes est générée à partir d'une procédure stockée, alors enchaînant Linq où les clauses ne fonctionnent pas.
@ Agent_9191 - OK, mais votre propriété de navigation doit être appelée
PersonMerseals Code> plutôt que
PersonneMeal code> car c'est une collection. En ce qui concerne votre question: '
J'ai une vue qui montre un seul repas à la fois, je veux donc que les informations relatives à ce repas code>'. Comment déterminez-vous quel repas exactement pour charger et montrer?
@Yakimych J'ai l'ID du repas disponible dans la fonction GetPersons (), donc je peux faire une comparaison avec un repas donné ou un repas lui-même (récupéré séparément). Idéalement, je voudrais transmettre ce repas.Id (ou repas) à EF afin de ne charger que cette partie de la collection.