EntityCollection<TEntity>.Attach メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
オブジェクト コンテキスト内の 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 メソッドは、ソース オブジェクトと関連オブジェクトのコレクションの両方が既にオブジェクト コンテキストに存在する場合にそれらの間のリレーションシップを定義するために使用されます。 オブジェクトや、リレーションシップが既に定義されているオブジェクト グラフをアタッチするには、Attach の ObjectContext メソッドを呼び出します。 ソース オブジェクトに関連付けられている新しいオブジェクトを作成するには、Add の EntityCollection<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
アタッチされるオブジェクト。
例外
entity
が null
である場合。
entity
をソース オブジェクトに関連付けられない場合。 これは、概念スキーマのアソシエーションで 2 つの型の間のリレーションシップがサポートされていない場合に発生する可能性があります。
- または -
例
この例には、Adventure Works Sales Model が使用されています。 この例のコードを実行するには、あらかじめプロジェクトに AdventureWorks Sales Model を追加し、Entity Framework を使用するようにプロジェクトを構成しておく必要があります。 これを行うには、「 方法: Entity Framework プロジェクトを手動で構成する 」および 「方法: モデル ファイルとマッピング ファイルを手動で定義する」の手順を完了します。
次の使用例は、デタッチされたオブジェクトとデタッチされたSalesOrderDetail
SalesOrderHeader
オブジェクトのコレクションをオブジェクト コンテキストにアタッチし、オブジェクトと各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 つのオブジェクトの両方が既にオブジェクト コンテキストに存在する場合にそれらの間のリレーションシップを定義するために使用されます。 オブジェクトや、リレーションシップが既に定義されているオブジェクト グラフをアタッチするには、Attach の ObjectContext メソッドを呼び出します。 ソース オブジェクトに関連付けられている新しいオブジェクトを作成するには、Add の EntityCollection<TEntity> メソッドを呼び出します。 詳しくは、「オブジェクトのアタッチとデタッチ」をご覧ください。
EntityCollection<TEntity> に既にオブジェクトが読み込まれている場合、Attach メソッドは、オブジェクトを EntityCollection<TEntity> の既存のオブジェクトとマージします。
この場合、アタッチされるオブジェクトは、関連エンティティ オブジェクトの完全なセットとは見なされません。
この EntityCollection<TEntity> に関連付けられたオブジェクトおよびそれにアタッチされているすべてのオブジェクトは、状態が Unchanged または Modified である必要があります。
Deleted 状態のオブジェクトは、ObjectStateManager で既にリレーションシップ インスタンスが追跡されている場合にのみアタッチできます。
適用対象
.NET