In Entity Framework (in particolare EF 3.5, ma se esiste in EF 4 mi dà un motivo per eseguire l'aggiornamento) è possibile caricare solo una parte di una raccolta? Forse mi sto avvicinando a questo torto, quindi sono aperto a suggerimenti. I miei tavoli/entità simile al seguente:Lazy Load Entity Framework EntityCollection con i criteri
Person PersonMeal Meal
------ 1---* ---------- *---1 -----
ID ID ID
... PersonID ...
MealID
Value
...
Ho una lista di Person
oggetti che sono stati recuperati tramite Entity Framework tramite una stored procedure. Ho una visione che mostra solo uno Meal
alla volta, quindi voglio solo le informazioni relative a quel pasto. Attualmente ho un codice simile al seguente:
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
Il problema è che si sta caricando l'intera raccolta. Certo, è una piccola raccolta, quindi, nel peggiore dei casi, posso caricarlo tutto e quindi rimuovere tutto tranne quello di cui ho bisogno, ma è tutt'altro che ideale. Inoltre, non sono sicuro che sarebbe possibile senza innescare nessuno degli eventi di modifica della raccolta, poiché in primo luogo non avrebbero dovuto esserci.
"Person" ha una relazione molti-a-molti con "PersonMeal" e "PersonMeal" hanno una relazione molti-a-molti con "Pasto" come mostrato nella domanda? Oppure 'Person' ha piuttosto una relazione molti-a-molti con' Pasto', mentre 'PersonMeal' è la tabella di connessione? In tal caso, non dovrebbe esserci un'entità generata per 'PersonMeal'. Ho notato anche un campo 'Valore', tuttavia. Potresti chiarire un po 'la struttura dei tuoi dati? Uno screenshot del tuo EDM potrebbe essere utile, così come la struttura del tuo database. – Yakimych
@Yakimych Hai ragione, è un M2M tra Persona e Pasto mentre PersonMeal è la tabella/entità di connessione. –
@ Agent_9191 - Ok, in tal caso dovrebbe esserci solo una tabella 'PersonEntity', ma nessuna entità generata. L'entità 'Persona' dovrebbe avere una raccolta di' Pasti' e l'entità 'Pasto' dovrebbe avere una collezione di' Persone'. Hai generato il tuo modello dal database o lo hai creato tu stesso nel designer? E a cosa serve la proprietà 'Valore' (potrebbe essere la ragione per cui EF sta generando l'entità' PersonMeal')? – Yakimych