Dans Entity Framework (en particulier EF 3.5, mais si elle existe dans EF 4, cela me donne une raison de mettre à niveau) est-il possible de charger seulement une partie d'une collection? Je peux aussi aborder cette erreur, donc je suis ouvert aux suggestions. Mes tableaux/entités ressemble à ceci:Lazy Load Un Entity Framework EntityCollection avec des critères
Person PersonMeal Meal
------ 1---* ---------- *---1 -----
ID ID ID
... PersonID ...
MealID
Value
...
J'ai une liste de Person
objets qui ont été récupérés par Entity Framework via une procédure stockée. J'ai une vue qui montre seulement un Meal
à la fois, donc je veux seulement l'information liée à ce repas. Actuellement, j'ai le code qui ressemble à ceci:
Function GetPersons() As List(Of Person)
Dim personList = context.StoredProcedureCall(param1, param2, param3).ToList()
personList.ForEach(Function(x) LazyLoadProperties(x))
Return personList
End Function
' Work around function because VB lambdas don't take Sub's
Function LazyLoadProperties(ByVal person As Person) As Object
If (Not person.PersonMeal.IsLoaded) Then
person.PersonMeal.Load()
End If
Return Nothing
End Function
Le problème est que c'est le chargement de toute la collection. Certes, c'est une petite collection, donc le pire des cas, je peux tout charger et ensuite enlever tout sauf celui dont j'ai besoin, mais c'est loin d'être idéal. De plus, je ne suis pas sûr que ce serait possible sans déclencher aucun des événements de modification de la collection puisqu'ils n'auraient pas dû être là en premier lieu.
Est-ce que 'Person' a une relation many-to-many avec' PersonMeal' et 'PersonMeal' a une relation many-to-many avec' Meal' comme indiqué dans votre question? Ou est-ce que 'Person' a plutôt une relation many-to-many avec' Meal', alors que 'PersonMeal' est la table de connexion? Si c'est le cas, il ne devrait pas y avoir d'entité générée pour 'PersonMeal'. J'ai également remarqué un champ 'Value', cependant. Pourriez-vous clarifier un peu votre structure de données? Une capture d'écran de votre EDM pourrait être utile, ainsi que la structure de votre base de données. – Yakimych
@Yakimych Vous avez raison, c'est un M2M entre Personne et Repas avec PersonMeal étant la table/entité de connexion. –
@ Agent_9191 - Ok, dans ce cas, il devrait y avoir juste une table 'PersonEntity', mais aucune entité générée. L'entité 'Person' devrait avoir une collection de' Meals' et l'entité 'Meal' devrait avoir une collection de' People'. Avez-vous généré votre modèle à partir de la base de données ou l'avez-vous créé vous-même dans le concepteur? Et quelle est la propriété 'Value' pour (cela pourrait être la raison pour laquelle EF génère l'entité' PersonMeal')? – Yakimych