Sdílet prostřednictvím


EntityCollection<TEntity>.Load(MergeOption) Metoda

Definice

Načte související objekty do kolekce pomocí zadané možnosti sloučení.

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)

Parametry

mergeOption
MergeOption

Určuje způsob sloučení objektů v této kolekci s objekty, které mohly být vráceny z předchozích dotazů proti stejné ObjectContext.

Příklady

Tento příklad je založený na prodejním modelu Adventure Works. Pokud chcete kód spustit v tomto příkladu, musíte už do projektu přidat model AdventureWorks Sales Model a nakonfigurovat ho tak, aby používal Entity Framework. Chcete-li to provést, dokončete postupy v Postupy: Ruční konfigurace projektu Entity Framework a Postupy: Ruční definování modelu a mapování souborů.

Tento příklad načte související SalesOrderHeader objekty pro entitu 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()));
        }
    }
}

Poznámky

Tato metoda volá interní metodu RelatedEnd.ValidateLoad před načtením kolekce, která ověří, že volání Load má správné podmínky. Metoda RelatedEnd.ValidateLoad zkontroluje, že:

Pokud jsou objekty v kolekci již načteny do ObjectContext, metoda Load vynucuje MergeOption určené parametrem mergeOption. Další informace najdete v tématu řešení identit, správy stavu a sledování změn.

Chcete-li explicitně načíst související objekty, je nutné volat Load metodu na souvisejícím konci vrácenou navigační vlastností. Pro relaci 1:N volejte metodu Load pro EntityCollection<TEntity>. U relace 1:1 zavolejte Load na EntityReference<TEntity>. Tím se načte související data objektu do kontextu objektu. Pomocí smyčky foreach (For Each...Next v jazyce Visual Basic) můžete vypsat kolekci vrácených výsledků a podmíněně volat metodu Load pro EntityReference<TEntity> a EntityCollection<TEntity> vlastnosti pro každou entitu ve výsledcích.

Metoda Load načte související objekty ze zdroje dat bez ohledu na to, zda IsLoaded je true.

Poznámka

Když voláte metodu Load během výčtu foreach (C#) nebo For Each (Visual Basic), služba Object Services se pokusí otevřít novou čtečku dat. Tato operace selže, pokud jste nepovolili více aktivních sad výsledků zadáním multipleactiveresultsets=true v připojovacím řetězci. Výsledek dotazu můžete také načíst do kolekce List<T>. Tím se čtečka dat zavře a umožní vám vytvořit výčet nad kolekcí, aby se načetly odkazované objekty.

Metoda EntityCollection<TEntity>.Load se synchronizuje s metodou EntityReference<TEntity>.Load.

Platí pro