Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Utilizzando il sito si accetta luso di cookies per analisi, risultati personalizzati e pubblicit.
Nei modelli seguenti vengono descritte la modalit di caricamento delle entit correlate:
Descrizione possibile creare una query Entity SQL o LINQ to Entities che navighi in modo esplicito tra le relazioni utilizzando le propriet di navigazione. Quando si esegue una query di questo tipo, vengono restituite le entit correlate incluse come propriet di navigazione nella proiezione pi esterna della query. Per ulteriori informazioni, vedere Procedura: spostarsi nelle relazioni utilizzando le propriet di navigazione (Entity Framework).
Caricamento esplicito
Per caricare in modo esplicito le entit in ObjectContext sono necessari pi round trip al database e potrebbe essere necessaria la funzionalit MARS (Multiple Active Result Set), ma la quantit di dati restituiti limitata esclusivamente alle entit caricate. Utilizzare il metodo Load su un oggetto EntityCollection o EntityReference o il metodo LoadProperty sull'oggetto ObjectContext per recuperare in modo esplicito le entit correlate dall'origine dati. Ogni chiamata al metodo Load apre una connessione al database per recuperare le informazioni correlate. In questo modo si garantisce che una query non venga mai eseguita senza una richiesta esplicita dell'entit correlata. Il caricamento esplicito il comportamento predefinito di Entity Framework . Nota: Prima della chiamata a Load, una quantit ridotta di informazioni sull'entit correlata gi caricata in ObjectContext. Per ulteriori informazioni, vedere la sezione Explicitly Loading Related Objects di questo argomento.
Caricamento lazy
Con questo tipo di caricamento le entit correlate vengono caricate automaticamente dall'origine dati quando si accede a una propriet di navigazione. inoltre necessario tenere presente che ogni propriet di navigazione a cui si accede produce come risultato l'esecuzione di una query separata sull'origine dati se l'entit non gi in ObjectContext. Per ulteriori informazioni, vedere la sezione Lazy Loading di questo argomento.
Caricamento eager Oppure Definizione dei percorsi della query con Include
Se si conosce la forma esatta del grafico delle entit correlate che l'applicazione richiede, possibile utilizzare il metodo Include nell'oggetto ObjectQuery per definire un percorso della query che controlli quali entit correlate restituire come parte della query iniziale. Quando si definisce un percorso della query, necessaria una sola richiesta nel database per restituire tutte le entit definite dal percorso in un singolo set di risultati. Tutte le entit correlate del tipo specificato nel percorso vengono caricate con ciascun oggetto restituito dalla query. Per ulteriori informazioni, vedere la sezione Defining a Query Path to Shape Query Results di questo argomento.
http://msdn.microsoft.com/it-it/library/vstudio/bb896272(v=vs.100).aspx
1/4
15/4/2014
Nota:
Quando si chiama il metodo Load durante un'enumerazione foreach (C#) o For Each (Visual Basic), Entity Framework tenta di aprire un nuovo lettore dati. Questa operazione non verr eseguita correttamente a meno che non sia stata abilitata la funzionalit MARS (Multiple Active Result Set) specificando multipleactiveresultsets=true nella stringa di connessione. Per ulteriori informazioni, vedere Using Multiple Active Result Sets (MARS) in MSDN. anche possibile caricare il risultato della query in una raccolta List. In questo caso il lettore dati viene chiuso ed possibile enumerare la raccolta per caricare le entit di riferimento.
Per ulteriori informazioni, vedere Procedura: caricare in modo esplicito oggetti correlati (Entity Framework).
Definizione di un percorso della query per determinare la struttura dei risultati di query
Per specificare il percorso della query, passare una rappresentazione di stringa dell'oggetto grafico al metodo Include su ObjectQuery . Questo percorso specifica quali entit correlate restituire quando viene eseguita una query di oggetto. Un percorso della query definito in una query per gli oggetti Contact garantisce, ad esempio, che vengano restituiti tutti gli oggetti SalesOrderHeader e SalesOrderDetail correlati. Questo comportamento viene illustrato nella query seguente:
C#
Le considerazioni seguenti riguardano la definizione dei percorsi della query: I percorsi della query possono essere utilizzati con i metodi del generatore di query e con le query LINQ. Quando si chiama Include , il percorso della query valido solo nell'istanza restituita di ObjectQuery . Le altre istanze di ObjectQuery e il contesto dell'oggetto stesso non sono interessati. Poich Include restituisce l'oggetto query, possibile chiamare questo metodo pi volte su un oggetto ObjectQuery per includere entit di pi relazioni, come nell'esempio seguente:
C#
L'utilizzo di percorsi della query pu comportare l'esecuzione di comandi complessi nell'origine dati, derivanti da query di oggetto apparentemente semplici. Questo comportamento si verifica perch sono necessari uno o pi join per restituire oggetti correlati in una singola query, il che comporta la presenza di dati ridondanti per ogni entit correlata restituita dall'origine dati. Questa complessit maggiore nelle query su un modello complesso, ad esempio un'entit con ereditariet o un percorso che include relazioni molti-a-molti. Utilizzare il metodo ToTraceString per visualizzare il comando che verr generato da un oggetto ObjectQuery . Quando un percorso della query include troppi oggetti correlati o gli oggetti contengono troppi dati di riga, la query potrebbe non essere completata dall'origine dati. Questo si verifica se la query richiede un'archiviazione temporanea intermedia superiore alle possibilit dell'origine dati. In questo caso, possibile ridurre la complessit della query sull'origine dati caricando in modo esplicito gli oggetti correlati oppure abilitando il caricamento posticipato. Se dopo avere ottimizzato una query complessa si ottengono ancora timeout frequenti, aumentare il valore di timeout impostando la propriet CommandTimeout.
Per ulteriori informazioni, vedere Procedura: utilizzare percorsi di query per influenzare i risultati (Entity Framework).
http://msdn.microsoft.com/it-it/library/vstudio/bb896272(v=vs.100).aspx
2/4
15/4/2014
nuovo modello e le corrispondenti classi generate, LazyLoadingEnabled viene impostato su true nel costruttore del contesto dell'oggetto. Con la funzione di caricamento lazy abilitata, le entit correlate non vengono caricate dall'origine dati fino a quando la funzione di accesso get di una propriet di navigazione non accede a tali oggetti a livello di codice. Per disabilitare il caricamento lazy, impostare la propriet LazyLoadingEnabled su false nell'istanza di ObjectContextOptions restituita dalla propriet System.Data.Objects.ObjectContext.ContextOptions. Il caricamento lazy pu essere utilizzato insieme al caricamento eager. In questo modo, possibile definire un grafico di dati di base tramite i percorsi della query, nonch caricare entit correlate aggiuntive non incluse nei percorsi della query originali in base alle necessit. Per ulteriori informazioni, vedere Procedura: utilizzare il caricamento lazy per caricare oggetti correlati (Entity Framework). Quando si utilizza il caricamento lazy utile tenere presenti le seguenti considerazioni: Il caricamento lazy supportato per le propriet di navigazione che restituiscono sia un'entit singola, ad esempio EntityReference , che una raccolta di entit, ad esempio EntityCollection. Se il caricamento lazy abilitato ed stata gi caricata un'entit correlata, questa non verr ricaricata. Il caricamento lazy supportato per le entit che si trovano in uno stato Detached. In questo caso, gli oggetti correlati vengono restituiti anche in uno stato Detached. Il comportamento del caricamento lazy determinato dall'istanza ObjectContext utilizzata per recuperare l'oggetto dall'origine dati (anche se l'entit stata caricata con NoTrackingMergeOption) o alla quale l'oggetto stato aggiunto o allegato. Per questo motivo, non possibile modificare il comportamento del caricamento lazy una volta che il contesto stato eliminato e qualsiasi ulteriore operazione di caricamento lazy non riuscir. Per la serializzazione delle entit pu essere utile disabilitare il caricamento lazy. In caso contrario, verr attivato il caricamento lazy e l'entit serializzata potrebbe includere pi dati del previsto.
Quando si utilizza il caricamento lazy con entit POCO, esistono ulteriori considerazioni da tenere presente. Per ulteriori informazioni, vedere Caricamento di entit POCO correlate (Entity Framework).
http://msdn.microsoft.com/it-it/library/vstudio/bb896272(v=vs.100).aspx
3/4
15/4/2014
Vedere anche
Concetti
Esecuzione di query su un modello concettuale (Entity Framework) Query di oggetto (Entity Framework) Metodi del generatore di query (Entity Framework)
No
http://msdn.microsoft.com/it-it/library/vstudio/bb896272(v=vs.100).aspx
4/4