EntityCollection<TEntity>.Load(MergeOption) メソッド

定義

指定されたマージ オプションを使用して、コレクションに関連オブジェクトを読み込みます。

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)

パラメーター

mergeOption
MergeOption

このコレクション内のオブジェクトを、同じ ObjectContext に対する以前のクエリから返されたオブジェクトとどのようにマージするかを指定します。

この例には、Adventure Works Sales Model が使用されています。 この例のコードを実行するには、あらかじめプロジェクトに AdventureWorks Sales Model を追加し、Entity Framework を使用するようにプロジェクトを構成しておく必要があります。 これを行うには、「 方法: Entity Framework プロジェクトを手動で構成する」 および「 方法: モデル ファイルとマッピング ファイルを手動で定義する」の手順を完了します。

この例では、SalesOrderHeader エンティティに関連付けられている 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()));
        }
    }
}

注釈

このメソッドは、コレクションを読み込む前に内部 RelatedEnd.ValidateLoad メソッドを呼び出します。これにより、 の Load 呼び出しに正しい条件があることを検証します。 メソッドでは RelatedEnd.ValidateLoad 、次のことが確認されます。

コレクション内のオブジェクトが に既に読み込ObjectContextまれている場合、 メソッドは Load パラメーターで指定された をMergeOptionmergeOption適用します。 詳しくは、「ID 解決、状態管理、および変更の追跡」をご覧ください。

関連オブジェクトを明示的に読み込むには、ナビゲーション プロパティによって返される関連する末尾で メソッドを呼び出す Load 必要があります。 一対多リレーションシップの場合は、 で EntityCollection<TEntity>メソッドをLoad呼び出します。 一対一リレーションシップの場合は、 で EntityReference<TEntity>Load呼び出します。 これにより、関連オブジェクト データがオブジェクト コンテキストに読み込まれます。 返された結果のコレクションを列挙するには、ループ (For Each...NextVisual Basic では ) を使用foreachし、結果の各エンティティの EntityReference<TEntity> メソッドと EntityCollection<TEntity> プロパティを条件付きで呼び出Loadすことができます。

メソッドはLoad、 が であるかどうかにかかわらずIsLoadedtrue、データ ソースから関連オブジェクトを読み込みます。

注意

Load (C#) または foreach (Visual Basic) 列挙で、For Each メソッドを呼び出すと、Object Services は新たにデータ リーダーを開こうとします。 この操作は、接続文字列で multipleactiveresultsets=true を指定して複数のアクティブな結果セットを有効にしていない限り失敗します。 クエリの結果は、List<T> コレクションに読み込むこともできます。 この場合、データ リーダーが閉じ、コレクションを列挙して参照オブジェクトを読み込むことができます。

EntityCollection<TEntity>.Load メソッドは EntityReference<TEntity>.Load メソッドと同期しています。

適用対象