EntityCollection<TEntity>.Load(MergeOption) EntityCollection<TEntity>.Load(MergeOption) EntityCollection<TEntity>.Load(MergeOption) Method

Definizione

Carica gli oggetti correlati nell'insieme utilizzando l'opzione di unione specificata.Loads related objects into the collection, using the specified merge option.

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

Parametri

mergeOption
MergeOption MergeOption MergeOption

Specifica il modo in cui gli oggetti dell'insieme devono essere uniti con gli eventuali oggetti restituiti dalle query precedenti sullo stesso oggetto ObjectContext.Specifies how the objects in this collection should be merged with the objects that might have been returned from previous queries against the same ObjectContext.

Esempi

Questo esempio è basato il.This example is based on the . 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.To run the code in this example, you must have already added the AdventureWorks Sales Model to your project and configured your project to use the Entity Framework. A tale scopo, completare le procedure in come: Configurare manualmente un progetto Entity Framework e come: File di Mapping e definire il modello manualmente.To do this, complete the procedures in How to: Manually Configure an Entity Framework Project and How to: Manually Define the Model and Mapping Files.

In questo esempio vengono caricati gli oggetti SalesOrderHeader correlati per l'entità Contact.This example loads the related SalesOrderHeader objects for the Contact entity.

// 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()));
        }
    }
}
' Specify the customer ID. 
Dim contactID As Integer = 4332

Using context As New AdventureWorksEntities()
    context.ContextOptions.LazyLoadingEnabled = False

    ' Get a specified customer by contact ID. 
    Dim contact = (From c In context.Contacts
        Where c.ContactID = contactID
        Select c).First()

    ' Load the orders for the customer explicitly. 
    If Not contact.SalesOrderHeaders.IsLoaded Then
        contact.SalesOrderHeaders.Load()
    End If

    For Each order As SalesOrderHeader In contact.SalesOrderHeaders
        ' Load the items for the order if not already loaded. 
        If Not order.SalesOrderDetails.IsLoaded Then
            order.SalesOrderDetails.Load()
        End If

        Console.WriteLine(String.Format("PO Number: {0}", order.PurchaseOrderNumber))
        Console.WriteLine(String.Format("Order Date: {0}", order.OrderDate.ToString()))
        Console.WriteLine("Order items:")
        For Each item As SalesOrderDetail In order.SalesOrderDetails
            Console.WriteLine(String.Format("Product: {0} Quantity: {1}", _
                                              item.ProductID.ToString(), item.OrderQty.ToString()))
        Next
    Next
End Using

Commenti

Questo metodo chiama interna RelatedEnd.ValidateLoad prima di caricare la raccolta, che verifica che una chiamata al metodo Load ha le condizioni corrette.This method calls the internal RelatedEnd.ValidateLoad method before loading the collection, which validates that a call to Load has the correct conditions. Il RelatedEnd.ValidateLoad metodo controlla che:The RelatedEnd.ValidateLoad method checks that:

Quando gli oggetti nella raccolta sono già caricati nel ObjectContext, il Load metodo impone la MergeOption specificato da di mergeOption parametro.When objects in the collection are already loaded into the ObjectContext, the Load method enforces the MergeOption specified by the mergeOption parameter. Per altre informazioni, vedere risoluzione di identità, gestione dello stato e rilevamento modifiche.For more information, see Identity Resolution, State Management, and Change Tracking.

Per caricare esplicitamente oggetti correlati, è necessario chiamare il Load metodo sull'entità finale correlata restituita dalla proprietà di navigazione.To explicitly load related objects, you must call the Load method on the related end returned by the navigation property. Per una relazione uno-a-molti, chiamare il Load metodo EntityCollection<TEntity>.For a one-to-many relationship, call the Load method on EntityCollection<TEntity>. Per una relazione uno a uno, chiamare il Load su EntityReference<TEntity>.For a one-to-one relationship, call the Load on EntityReference<TEntity>. In questo modo, i dati degli oggetti correlati verranno caricati nel contesto dell'oggetto.This loads the related object data into the object context. È possibile enumerare la raccolta di risultati restituiti tramite un foreach ciclo (For Each...Next in Visual Basic) e richiedere condizionatamente il Load metodo sul EntityReference<TEntity> e EntityCollection<TEntity> proprietà per ogni entità nei risultati.You can enumerate through the collection of returned results using a foreach loop (For Each...Next in Visual Basic) and conditionally call the Load method on EntityReference<TEntity> and EntityCollection<TEntity> properties for each entity in the results.

Il Load metodo carica gli oggetti correlati dall'origine dati o meno IsLoaded è true.The Load method loads related objects from the data source whether or not IsLoaded is 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.When you call the Load method during a foreach (C#) or For Each (Visual Basic) enumeration, Object Services tries to open a new data reader. 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.This operation will fail unless you have enabled multiple active results sets by specifying multipleactiveresultsets=true in the connection string. È inoltre possibile caricare il risultato della query in una raccolta List<T>.You can also load the result of the query into a List<T> collection. In questo modo viene chiuso il lettore dati ed è possibile enumerare la raccolta per caricare gli oggetti a cui viene fatto riferimento.This closes the data reader and enables you to enumerate over the collection to load referenced objects.

Il metodo EntityCollection<TEntity>.Load viene sincronizzato con il metodo EntityReference<TEntity>.Load.The EntityCollection<TEntity>.Load method is synchronized with the EntityReference<TEntity>.Load method.

Si applica a