EntityCollection<TEntity>.Load(MergeOption) Metodo

Definizione

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:

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 trueo 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