Object Services の概要 (Entity Framework)

Object Services は、エンティティ フレームワーク のコンポーネントです。このコンポーネントは、エンティティ型のインスタンスである厳密に型指定された CLR オブジェクトとして表現されるデータのクエリ、挿入、更新、および削除を可能にします。Object Services は、エンティティ データ モデル (EDM) で定義された型に対して、統合言語クエリ (LINQ) および Entity SQL クエリの両方をサポートしています。Object Services は、返されたデータをオブジェクトとして具体化し、オブジェクトの変更をデータ ソースに保存します。また、変更の追跡、コントロールへのオブジェクトのバインド、同時実行の処理などの機能も提供します。Object Services は、System.Data.Objects 名前空間および System.Data.Objects.DataClasses 名前空間のクラスによって実装されます。

オブジェクト コンテキスト

ObjectContext クラスは、EDM で定義されたエンティティ型のインスタンスであるオブジェクト形式のデータを扱うための主要なクラスです。ObjectContext クラスのインスタンスでは、次のものがカプセル化されます。

  • データベースへの接続 (EntityConnection オブジェクトの形式)。

  • モデルを記述するメタデータ (MetadataWorkspace オブジェクトの形式)。

  • 作成、更新、および削除の操作時にオブジェクトを追跡する ObjectStateManager オブジェクト。

エンティティ フレームワーク ツールは、概念スキーマ定義言語 (CSDL) ファイルを使用して、オブジェクト レイヤ コードを生成します。このコードは、エンティティ データをオブジェクトとして操作するためと、Object Services 機能を利用するために使用します。生成されたこのコードには、次のデータ クラスが含まれます。

  • 型指定された ObjectContext クラス。このクラスは、モデルの EntityContainer を表し、ObjectContext から派生します。

  • エンティティ型を表し、EntityObject から継承したクラス。

  • 複合型を表し、ComplexObject から継承したクラス。

[!メモ]

ObjectContext クラスはスレッド セーフではありません。マルチスレッドのシナリオでは、ObjectContext 内のデータ オブジェクトの整合性を確保できません。

Object Services の使用

Object Services では、エンティティ フレームワーク に対するプログラミングで次の動作がサポートされています。

オブジェクトとしてのデータのクエリ

Object Services を使用すると、LINQ、Entity SQL、またはクエリ ビルダ メソッドを使用して、エンティティ データ モデル に対するクエリを実行し、データをオブジェクトとして返すことができます。詳細については、「オブジェクト クエリ (Entity Framework)」を参照してください。

クエリ結果の構造化

既定では、Object Services はクエリで要求されたオブジェクトのみを返します。オブジェクト間にリレーションシップが存在する場合は、クエリで関連オブジェクトを返すかどうかを指定できます。また、後続の要求で関連オブジェクトを読み込むこともできます。詳細については、「クエリ結果の構造化 (Entity Framework)」を参照してください。

ビルダ メソッドを使用したクエリの作成

Object Services は、Entity SQL クエリおよび LINQ to Entities クエリに相当するクエリの構築に使用するメソッドを ObjectQuery で提供します。詳細については、「クエリ ビルダ メソッド (Entity Framework)」を参照してください。

オブジェクトの追加、変更、および削除

Object Services は、データ オブジェクトをメモリに保存し、オブジェクト コンテキスト内でのオブジェクトの追加、変更、および削除を可能にします。オブジェクトに加えられた変更は、オブジェクト コンテキストによって追跡されます。詳細については、「オブジェクトの追加、変更、および削除 (Entity Framework)」を参照してください。

データ ソースへの変更の保存

Object Services では、オブジェクト コンテキストのオブジェクトに対する変更がキャッシュされます。明示的な要求に応じて、Object Services はそれらの変更をデータ ソースに保存します。詳細については、「変更の保存と同時実行制御の管理 (Entity Framework)」を参照してください。

コントロールへのオブジェクトのバインド

Objects Services を使用すると、DataGridView コントロールなど、データ バインドをサポートするコントロールにオブジェクトをバインドできます。詳細については、「コントロールへのオブジェクトのバインド (Entity Framework)」を参照してください。

オブジェクトのアタッチ

Object Services を使用すると、既存のオブジェクトをオブジェクト コンテキストに直接アタッチすることができます。これにより、ASP.NET アプリケーションのビュー ステートに保存されていたオブジェクトや、リモート メソッド呼び出しまたは Web サービスによって返されたオブジェクトをアタッチできます。詳細については、「オブジェクトのアタッチ (Entity Framework)」を参照してください。

オブジェクトのデタッチ

オブジェクトが Windows フォーム コントロールにバインドされている場合など、アプリケーションを実行している間、オブジェクト コンテキスト インスタンスを保持することが必要になる場合があります。Object Services を使用すると、不要になったオブジェクトをデタッチしてリソースを解放することにより、オブジェクト コンテキストのサイズを管理することができます。詳細については、「オブジェクトのデタッチ (Entity Framework)」を参照してください。

オブジェクトのシリアル化

Object Services は、オブジェクトの Windows Communication Foundation (WCF) データ コントラクト シリアル化、バイナリ シリアル化、および XML シリアル化をサポートしています。データ コントラクト シリアル化は、Web サービスのシナリオに便利です。バイナリ シリアル化は、ビュー ステートを使用して ASP.NET アプリケーションでオブジェクトを保持する場合に特に便利です。詳細については、「オブジェクトのシリアル化 (Entity Framework)」を参照してください。

オブジェクト ID の管理と変更の追跡

Object Services は ID 値を使用して、オブジェクトの変更の追跡、競合の処理、データ ソースからのデータの取得のタイミングの決定などを行います。詳細については、「オブジェクト コンテキストの管理 (Entity Framework)」を参照してください。

同時実行の管理

1 つまたは複数のプロパティの ConcurrencyMode 属性が "fixed" に設定されている場合、Object Services は同時実行を追跡できます。この場合、同時実行違反が検出されると、Object Services で特定の例外が発生します。詳細については、「変更の保存と同時実行制御の管理 (Entity Framework)」を参照してください。

接続の管理

Object Services を使用すると、オブジェクト コンテキストで使用する接続を明示的に管理し、そのオブジェクト コンテキストに独自の接続を提供することができます。詳細については、「Object Services の接続の管理 (Entity Framework)」を参照してください。

トランザクションの管理

Object Services は、データ ソースに対する操作を調整し、分散トランザクションに参加するために .NET Framework トランザクションをサポートしています。詳細については、「Object Services のトランザクションの管理 (Entity Framework)」を参照してください。

Entity Data Model でのカスタム オブジェクトの使用

Object Services を使用すると、独自のオブジェクトを手動で定義することも、エンティティ データ モデル で既存のオブジェクトを使用することもできます。詳細については、「オブジェクトのカスタマイズ (Entity Framework)」を参照してください。

参照

その他のリソース

Object Services (Entity Framework)
Entity Framework タスク