Condividi tramite


EntityCollection<TEntity>.Load(MergeOption) Metodo

Definizione

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 in questa raccolta devono essere uniti agli oggetti che potrebbero essere stati restituiti dalle query precedenti sullo stesso ObjectContext.

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 descritte in Procedura: Configurare manualmente un progetto Entity Framework e Procedura: Definire manualmente i file di modello e 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 RelatedEnd.ValidateLoad interno prima di caricare la raccolta, che convalida che una chiamata a Load abbia le condizioni corrette. Il metodo RelatedEnd.ValidateLoad verifica che:

Quando gli oggetti nell'insieme sono già caricati nella ObjectContext, il metodo Load applica il MergeOption specificato dal parametro mergeOption. Per altre informazioni, vedere Identity Resolution, State Management e Change Tracking.

Per caricare in modo esplicito gli oggetti correlati, è necessario chiamare il metodo Load sulla fine correlata restituita dalla proprietà di navigazione. Per una relazione uno-a-molti, chiamare il metodo Load in EntityCollection<TEntity>. Per una relazione uno-a-uno, chiamare il Load in EntityReference<TEntity>. In questo modo i dati dell'oggetto correlati vengono caricati nel contesto dell'oggetto. È possibile enumerare tramite 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 le proprietà EntityCollection<TEntity> per ogni entità nei risultati.

Il metodo Load carica gli oggetti correlati dall'origine dati indipendentemente dal fatto che IsLoaded sia true.

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 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 raccolta di List<T>. Chiude il lettore dati e consente di enumerare la raccolta per caricare gli oggetti a cui si fa riferimento.

Il metodo EntityCollection<TEntity>.Load viene sincronizzato con il metodo EntityReference<TEntity>.Load.

Si applica a