オブジェクトのデタッチ (Entity Framework)

Entity Framework は、実行時間の長いオブジェクト コンテキストを必要とするシナリオをサポートします。たとえば、Windows アプリケーションで、データ オブジェクトが表示コントロールにバインドされ、データがコントロールに表示されている間はオブジェクトを保存する必要があるようなシナリオが考えられます。オブジェクト コンテキスト内でクエリを実行すると、返されたオブジェクトはコンテキストに自動的にアタッチされます。このことは、同じオブジェクト コンテキスト内で繰り返しクエリを実行すると、オブジェクト コンテキストに必要なメモリが増えることを示します。クエリが NoTrackingMergeOption 値で実行された場合は例外です。この場合、オブジェクトは、オブジェクト コンテキストにアタッチされません。

Object Services を使用して、オブジェクト コンテキストからオブジェクトをデタッチできます。不要になったオブジェクトはデタッチできます。デタッチされたオブジェクトは、オブジェクト コンテキストによって参照されなくなるので、そのリソースを .NET Framework で再利用できます。

オブジェクトをデタッチするには、次の例に示すように、Detach メソッドを呼び出して、デタッチするオブジェクトへの参照を渡します。

' Detach the first SalesOrderDetail in the collection.
context.Detach(order.SalesOrderDetail.First())
// Detach the first SalesOrderDetail in the collection.
context.Detach(order.SalesOrderDetail.First());

オブジェクトをデタッチする際は、次の点に注意してください。

  • Detach は、メソッドに渡される特定のオブジェクトにのみ影響します。デタッチされるオブジェクトに関連オブジェクトがオブジェクト コンテキストにある場合、それらのオブジェクトはデタッチされません。

  • デタッチされたオブジェクトのリレーションシップ情報は維持されません。

  • オブジェクトをデタッチすると、オブジェクトの状態情報 (追跡した変更および一時キー値を含む) は維持されません。

  • オブジェクトのデタッチは、データソース内のデータには影響しません。

  • 連鎖削除ディレクティブおよび参照に関する制約は、デタッチ操作中には適用されません。

  • 操作を実行するために追加の処理が必要な場合は、オブジェクトのデタッチを検討する必要があります。異なるデータ セットを含む新しいフォームの表示などのユーザー データのスコープが変更された場合、既存の ObjectContext からオブジェクトをデタッチするのではなく、新しい ObjectContext インスタンスを作成することを検討してください。

詳細については、「オブジェクト コンテキストからオブジェクトをデタッチする方法 (Entity Framework)」を参照してください。

参照

概念

オブジェクトのアタッチ (Entity Framework)

その他のリソース

オブジェクト コンテキストの管理 (Entity Framework)