EntityCollection<TEntity>.Attach メソッド

定義

オブジェクト コンテキスト内の 2 つのアタッチ済みオブジェクトの間のリレーションシップを定義します。

オーバーロード

Attach(IEnumerable<TEntity>)

オブジェクトと、オブジェクト コンテキスト内の関連オブジェクトのコレクションとのリレーションシップを定義します。

Attach(TEntity)

オブジェクト コンテキスト内の 2 つのアタッチ済みオブジェクトの間のリレーションシップを定義します。

Attach(IEnumerable<TEntity>)

オブジェクトと、オブジェクト コンテキスト内の関連オブジェクトのコレクションとのリレーションシップを定義します。

public:
 void Attach(System::Collections::Generic::IEnumerable<TEntity> ^ entities);
public void Attach (System.Collections.Generic.IEnumerable<TEntity> entities);
override this.Attach : seq<'Entity (requires 'Entity : null and 'Entity :> System.Data.Objects.DataClasses.IEntityWithRelationships)> -> unit
override this.Attach : seq<'Entity (requires 'Entity : null)> -> unit
Public Sub Attach (entities As IEnumerable(Of TEntity))

パラメーター

entities
IEnumerable<TEntity>

ソース オブジェクトに関連付けられているオブジェクト コンテキスト内のオブジェクトのコレクション。

例外

entities コレクションは null です。

ソース オブジェクトまたは entities コレクション内のオブジェクトが null であるか、そのオブジェクトの状態が Unchanged または Modified ではありません。

- または -

EDM メタデータに基づいてリレーションシップを定義できません。 これは、概念スキーマのアソシエーションで 2 つの型の間のリレーションシップがサポートされていない場合に発生する可能性があります。

注釈

Attach メソッドは、ソース オブジェクトと関連オブジェクトのコレクションの両方が既にオブジェクト コンテキストに存在する場合にそれらの間のリレーションシップを定義するために使用されます。 オブジェクトや、リレーションシップが既に定義されているオブジェクト グラフをアタッチするには、AttachObjectContext メソッドを呼び出します。 ソース オブジェクトに関連付けられている新しいオブジェクトを作成するには、AddEntityCollection<TEntity> メソッドを呼び出します。 詳しくは、「オブジェクトのアタッチとデタッチ」をご覧ください。

コレクションに既にエンティティが含まれている場合は、Attach メソッドによって、指定したエンティティと既存のエンティティがマージされます。 この場合、指定したエンティティは、関連エンティティの完全なセットとは見なされません。

このメソッドに渡すエンティティはすべて、状態が Unchanged または Modified である必要があります。 状態が Deleted のオブジェクトは、そのリレーションシップのインスタンスが既に状態マネージャーによって追跡されている場合にのみ使用できます。

適用対象

Attach(TEntity)

オブジェクト コンテキスト内の 2 つのアタッチ済みオブジェクトの間のリレーションシップを定義します。

public:
 void Attach(TEntity entity);
public void Attach (TEntity entity);
override this.Attach : 'Entity -> unit
Public Sub Attach (entity As TEntity)

パラメーター

entity
TEntity

アタッチされるオブジェクト。

例外

entitynull である場合。

entity をソース オブジェクトに関連付けられない場合。 これは、概念スキーマのアソシエーションで 2 つの型の間のリレーションシップがサポートされていない場合に発生する可能性があります。

- または -

オブジェクトが null であるか、オブジェクトの状態が Unchanged または Modified でない場合。

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

次の使用例は、デタッチされたオブジェクトとデタッチされたSalesOrderDetailSalesOrderHeaderオブジェクトのコレクションをオブジェクト コンテキストにアタッチし、オブジェクトと各SalesOrderDetailオブジェクトの関係をSalesOrderHeader定義します。

private static void AttachRelatedObjects(
    ObjectContext currentContext,
    SalesOrderHeader detachedOrder,
    List<SalesOrderDetail> detachedItems)
{
    // Attach the root detachedOrder object to the supplied context.
    currentContext.Attach(detachedOrder);

    // Attach each detachedItem to the context, and define each relationship
    // by attaching the attached SalesOrderDetail object to the EntityCollection on
    // the SalesOrderDetail navigation property of the now attached detachedOrder.
    foreach (SalesOrderDetail item in detachedItems)
    {
        currentContext.Attach(item);
        detachedOrder.SalesOrderDetails.Attach(item);
    }
}

注釈

Attach メソッドは、2 つのオブジェクトの両方が既にオブジェクト コンテキストに存在する場合にそれらの間のリレーションシップを定義するために使用されます。 オブジェクトや、リレーションシップが既に定義されているオブジェクト グラフをアタッチするには、AttachObjectContext メソッドを呼び出します。 ソース オブジェクトに関連付けられている新しいオブジェクトを作成するには、AddEntityCollection<TEntity> メソッドを呼び出します。 詳しくは、「オブジェクトのアタッチとデタッチ」をご覧ください。

EntityCollection<TEntity> に既にオブジェクトが読み込まれている場合、Attach メソッドは、オブジェクトを EntityCollection<TEntity> の既存のオブジェクトとマージします。

この場合、アタッチされるオブジェクトは、関連エンティティ オブジェクトの完全なセットとは見なされません。

この EntityCollection<TEntity> に関連付けられたオブジェクトおよびそれにアタッチされているすべてのオブジェクトは、状態が Unchanged または Modified である必要があります。

Deleted 状態のオブジェクトは、ObjectStateManager で既にリレーションシップ インスタンスが追跡されている場合にのみアタッチできます。

適用対象