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 を使用するようにプロジェクトを構成している必要があります。 これを行うには、「
次の使用例は、デタッチされた 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 つのオブジェクト間のリレーションシップを定義するために使用されます。 リレーションシップが既に定義されているオブジェクトまたはオブジェクト グラフをアタッチするには、Attachで ObjectContext メソッドを呼び出します。 ソース オブジェクトに関連する新しいオブジェクトを作成するには、AddでEntityCollection<TEntity> メソッドを呼び出します。 詳しくは、「オブジェクトのアタッチとデタッチ」をご覧ください。
EntityCollection<TEntity>に既にオブジェクトが読み込まれている場合、Attach メソッドはオブジェクトをEntityCollection<TEntity>内の既存のオブジェクトとマージします。
アタッチされたオブジェクトは、関連するエンティティ オブジェクトの完全なセットであるとは見なされません。
この EntityCollection<TEntity> に関連付けられているオブジェクトと、それにアタッチされているすべてのオブジェクトは、 Unchanged または Modified 状態である必要があります。
Deleted状態のオブジェクトは、ObjectStateManagerが既にリレーションシップ インスタンスを追跡している場合にのみアタッチできます。