EntityCollection<TEntity>.Load(MergeOption) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Carica gli oggetti correlati nella raccolta utilizzando l'opzione di merge specificata.
public:
override void Load(System::Data::Objects::MergeOption mergeOption);
public override void Load (System.Data.Objects.MergeOption mergeOption);
override this.Load : System.Data.Objects.MergeOption -> unit
Public Overrides Sub Load (mergeOption As MergeOption)
Parametri
- mergeOption
- MergeOption
Specifica il modo in cui gli oggetti della raccolta devono essere uniti con gli eventuali oggetti restituiti dalle query precedenti sullo stesso oggetto ObjectContext.
Esempio
Questo esempio è basato sul modello Sales di Adventure Works. Per eseguire il codice incluso in questo esempio, è necessario avere già aggiunto il modello Sales di Adventure Works al progetto e avere configurato il progetto per l'utilizzo di Entity Framework. A tale scopo, completare le procedure descritte in Procedura: Configurare manualmente un progetto Entity Framework e Procedura: Definire manualmente il modello e i file di mapping.
In questo esempio vengono caricati gli oggetti SalesOrderHeader
correlati per l'entità Contact
.
// Specify the customer ID.
int contactID = 4332;
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
context.ContextOptions.LazyLoadingEnabled = false;
// Get a specified customer by contact ID.
var contact =
(from c in context.Contacts
where c.ContactID == contactID
select c).First();
// Load the orders for the customer explicitly.
if (!contact.SalesOrderHeaders.IsLoaded)
{
contact.SalesOrderHeaders.Load();
}
foreach (SalesOrderHeader order in contact.SalesOrderHeaders)
{
// Load the items for the order if not already loaded.
if (!order.SalesOrderDetails.IsLoaded)
{
order.SalesOrderDetails.Load();
}
Console.WriteLine(String.Format("PO Number: {0}",
order.PurchaseOrderNumber));
Console.WriteLine(String.Format("Order Date: {0}",
order.OrderDate.ToString()));
Console.WriteLine("Order items:");
foreach (SalesOrderDetail item in order.SalesOrderDetails)
{
Console.WriteLine(String.Format("Product: {0} "
+ "Quantity: {1}", item.ProductID.ToString(),
item.OrderQty.ToString()));
}
}
}
Commenti
Questo metodo chiama il metodo interno RelatedEnd.ValidateLoad
prima di caricare la raccolta, che convalida che una chiamata a Load abbia le condizioni corrette. Il RelatedEnd.ValidateLoad
metodo verifica che:
- Esiste un valore valido ObjectContext .
- L'entità non è in uno Deleted stato.
- MergeOption per Load deve essere NoTracking se e solo se l'entità di origine è NoTracking. Se l'entità di origine è stata recuperata con qualsiasi altro MergeOptionoggetto ,MergeOptionLoadpuò essere qualsiasi elemento , NoTracking ad esempio l'entità potrebbe essere stata caricata con OverwriteChanges e l'opzione Load può essere AppendOnly).
- Se
mergeOption
è NoTracking, Load non viene chiamato su un'entità già caricata e Load non viene chiamato in un oggetto non vuoto e non monitorato RelatedEnd.
Quando gli oggetti nella raccolta sono già caricati in ObjectContext, il Load metodo applica l'oggetto MergeOption specificato dal mergeOption
parametro . Per altre informazioni, vedere Risoluzione delle identità, Gestione dello stato e Rilevamento modifiche.
Per caricare in modo esplicito gli oggetti correlati, è necessario chiamare il Load
metodo sull'estremità correlata restituita dalla proprietà di navigazione. Per una relazione uno-a-molti, chiamare il Load metodo su EntityCollection<TEntity>. Per una relazione uno-a-uno, chiamare su LoadEntityReference<TEntity>. In questo modo, i dati degli oggetti correlati verranno caricati nel contesto dell'oggetto. È possibile enumerare la raccolta di risultati restituiti usando un foreach
ciclo (For Each...Next
in Visual Basic) e chiamare in modo condizionale il Load
metodo su EntityReference<TEntity> e EntityCollection<TEntity> le proprietà per ogni entità nei risultati.
Il Load metodo carica gli oggetti correlati dall'origine dati indipendentemente dal fatto che sia true
o meno IsLoaded .
Nota
Quando si chiama il metodo Load durante un'enumerazione foreach
(C#) o For Each
(Visual Basic), Object Services 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. È inoltre possibile caricare il risultato della query in una raccolta List<T>. In questo modo viene chiuso il lettore dati ed è possibile enumerare la raccolta per caricare gli oggetti a cui viene fatto riferimento.
Il metodo EntityCollection<TEntity>.Load viene sincronizzato con il metodo EntityReference<TEntity>.Load.
Si applica a
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per