EntityCollection<TEntity>.Load(MergeOption) Metod

Definition

Läser in relaterade objekt i samlingen med det angivna kopplingsalternativet.

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)

Parametrar

mergeOption
MergeOption

Anger hur objekten i den här samlingen ska sammanfogas med de objekt som kan ha returnerats från tidigare frågor mot samma ObjectContext.

Exempel

Det här exemplet baseras på Adventure Works försäljningsmodell. Om du vill köra koden i det här exemplet måste du redan ha lagt till AdventureWorks Sales Model i projektet och konfigurerat projektet för att använda Entity Framework. Det gör du genom att utföra procedurerna i Så här: Konfigurera ett Entity Framework-Project och Så här: Definiera modell- och mappningsfiler manuellt.

Det här exemplet läser in relaterade SalesOrderHeader objekt för entiteten 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()));
        }
    }
}

Kommentarer

Den här metoden anropar den interna RelatedEnd.ValidateLoad metoden innan samlingen läses in, vilket verifierar att ett anrop till Load har rätt villkor. Metoden RelatedEnd.ValidateLoad kontrollerar att:

När objekt i samlingen redan har lästs in i ObjectContextLoad tillämpar metoden den MergeOption som anges av parameternmergeOption. Mer information finns i Identitetsmatchning, Tillståndshantering och Ändringsspårning.

För att uttryckligen läsa in relaterade objekt måste du anropa Load metoden i den relaterade änden som returneras av navigeringsegenskapen. För en en-till-många-relation anropar du metoden på LoadEntityCollection<TEntity>. För en en-till-en-relation anropar du på LoadEntityReference<TEntity>. Detta läser in relaterade objektdata i objektkontexten. Du kan räkna upp en samling returnerade resultat med hjälp av en foreach-loop (For Each...Next i Visual Basic) och villkorligt anropa metoden LoadEntityReference<TEntity> och EntityCollection<TEntity> egenskaper för varje entitet i resultatet.

Metoden Load läser in relaterade objekt från datakällan oavsett om IsLoaded det är true.

Note

När du anropar metoden Load under en foreach (C#) eller For Each (Visual Basic) försöker Object Services öppna en ny dataläsare. Den här åtgärden misslyckas om du inte har aktiverat flera aktiva resultatuppsättningar genom att ange multipleactiveresultsets=true i reťazec pripojenia. Du kan också läsa in resultatet av frågan i en List<T> samling. Detta stänger dataläsaren och gör att du kan räkna upp över samlingen för att läsa in refererade objekt.

Metoden EntityCollection<TEntity>.Load synkroniseras med EntityReference<TEntity>.Load -metoden.

Gäller för