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 Projectおよび 方法: モデル ファイルとマッピング ファイルを手動で定義する方法の手順を完了します。

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

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が既にリレーションシップ インスタンスを追跡している場合にのみアタッチできます。

適用対象