В Entity Framework (в частности, EF 3.5, но если он существует в EF 4, это дает мне причину для обновления), можно ли лениво загрузить только часть коллекции? Возможно, я тоже подхожу к этому неправильно, поэтому я открыт для предложений. Мои таблицы / сущности выглядят примерно так:
Person PersonMeal Meal
------ 1---* ---------- *---1 -----
ID ID ID
... PersonID ...
MealID
Value
...
У меня есть список Person
объектов, которые были получены через Entity Framework с помощью хранимой процедуры. У меня есть представление, которое показывает только один Meal
за раз, поэтому я хочу только информацию, относящуюся к этой еде. В настоящее время у меня есть код, который выглядит так:
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
Проблема в том, что загружается вся коллекция. Конечно, это небольшая коллекция, поэтому в худшем случае я могу загрузить все, а затем удалить все, кроме той, которая мне нужна, но это далеко от идеала. Кроме того, я не уверен, что это было бы возможно без запуска каких-либо событий изменения коллекции, так как они не должны были быть там в первую очередь.