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 unione 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 di questa raccolta devono essere uniti agli oggetti che potrebbero essere stati restituiti dalle query precedenti sullo stesso ObjectContextoggetto .
Esempio
Questo esempio è basato sul modello Adventure Works Sales. Per eseguire il codice in questo esempio, è necessario aver già aggiunto il modello AdventureWorks Sales al progetto e configurato il progetto per l'uso di Entity Framework. A tale scopo, completare le procedure in Come: Configurare manualmente entity Framework Project e Come: Definire manualmente i file di modello e mapping.
In questo esempio vengono caricati gli oggetti correlati SalesOrderHeader 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 Deleted uno 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 MergeOption, puòLoadMergeOptionessere qualsiasi elemento, ma 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 su 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 ulteriori informazioni, vedere Risoluzione delle identità, Gestione dello stato e Rilevamento delle modifiche.
Per caricare in modo esplicito gli oggetti correlati, è necessario chiamare il Load metodo sulla fine 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 dell'oggetto correlati vengono caricati nel contesto dell'oggetto. È possibile enumerare la raccolta di risultati restituiti usando un ciclo foreach (For Each...Next in Visual Basic) e chiamare in modo condizionale il metodo Load su EntityReference<TEntity> e EntityCollection<TEntity> proprietà per ogni entità nei risultati.
Il Load metodo carica gli oggetti correlati dall'origine dati indipendentemente dal fatto che IsLoaded sia true.
Annotazioni
Quando si chiama il Load metodo durante un'enumerazione foreach (C#) o For Each (Visual Basic), Object Services tenta di aprire un nuovo lettore dati. Questa operazione avrà esito negativo a meno che non siano stati abilitati più set di risultati attivi specificando multipleactiveresultsets=true nella stringa di connessione. È anche possibile caricare il risultato della query in una List<T> raccolta. Chiude il lettore dati e consente di enumerare la raccolta per caricare gli oggetti a cui si fa riferimento.
Il EntityCollection<TEntity>.Load metodo viene sincronizzato con il EntityReference<TEntity>.Load metodo .