エンティティ データの使用
エンティティ フレームワーク は、一連の概念スキーマとストレージ スキーマを、それらの間のマッピングと共にクライアント ビューと呼ばれる Entity SQL ステートメントの双方向のペアにコンパイルします。これらのビューは、ランタイム エンジンでのクエリと更新の処理を実行します。ビューを生成するマッピング コンパイラは、デザイン時、または エンティティ データ モデル (EDM) スキーマに対して最初のクエリが実行される実行時に呼び出すことができます。
エンティティ フレームワーク は、基になるデータ プロバイダおよびリレーショナル データベースに EntityConnection を提供することにより、ストレージ固有の ADO.NET データ プロバイダを基に構築されます。
クエリが実行されると、それが解析され、クエリのオブジェクト モデル表現である正規コマンド ツリーに変換されます。正規コマンド ツリーは、SELECT、UPDATE、INSERT、および DELETE コマンドを表します。後続の処理はすべてコマンド ツリーで実行されます。コマンド ツリーは System.Data.EntityClient データ プロバイダ、および System.Data.SqlClient など、基になる .NET Framework データ プロバイダ間の通信手段です。
次の図は、データにアクセスするための Entity Framework アーキテクチャを示しています。
オブジェクトのクエリ
エンティティ フレームワーク ツールは、概念モデルで定義したエンティティ コンテナを表す ObjectContext から派生したクラスを生成します。ObjectContext クラスは、エンティティをオブジェクトとして返す EDM に対するクエリのほかに、エンティティ オブジェクトの作成、更新、および削除をサポートします。エンティティ フレームワーク は EDM に対するオブジェクト クエリをサポートします。クエリは、Entity SQL、統合言語クエリ (LINQ)、およびオブジェクト クエリ ビルダ メソッドを使用して構築できます。
概念モデルでは、エンティティはアソシエーションによって相互に関連します。オブジェクト レイヤでは、これらのアソシエーションは、エンティティ参照に基づいて関連するオブジェクトのコレクションを公開するプロパティによって表します。たとえば、School モデルでは、Department.Course は、Course と Department 間のアソシエーションに基づいて、Course オブジェクトのエンティティ コレクションを取得します。参照されたオブジェクトは自動的に読み込まれないため、エンティティ参照で Load メソッドを呼び出し、オブジェクト コンテキストに関連するオブジェクト データを読み込む必要があります。また、返されたオブジェクトと共に読み込む関連オブジェクトを定義するクエリ パスを指定することもできます。詳細については、「オブジェクトとしてのデータのクエリ (Entity Framework)」を参照してください。
クイック スタートからの次の例では、実行されたクエリはすべての Department オブジェクトを取得することを示しています。クエリ パスの定義により、Department オブジェクトに関連する Course オブジェクトも必ず返されます。Entity SQL WHERE 句は、返されたオブジェクトを Name によって順序付けます。
' Define a query that returns all Department objects and related
' Course objects, ordered by name.
Dim departmentQuery As ObjectQuery(Of Department) = _
schoolContext.Department.Include("Course").OrderBy("it.Name")
// Define a query that returns all Department objects and related
// Course objects, ordered by name.
ObjectQuery<Department> departmentQuery =
schoolContext.Department.Include("Course").OrderBy("it.Name");
詳細については、「オブジェクトとしてのデータのクエリ (Entity Framework)」を参照してください。
ストアド プロシージャを使用して、データ ソースでクエリを実行する EDM を定義できます。これらのストアド プロシージャの結果セットは、概念モデルのエンティティにマップされます。詳細については、「ストアド プロシージャのサポート (Entity Framework)」を参照してください。
オブジェクトの使用
オブジェクト コンテキスト内のオブジェクトは、データ ソース内のデータのエンティティ型の表現です。オブジェクトは、オブジェクト コンテキストで変更、作成、および削除することができます。オブジェクト コンテキストは、オブジェクト間の ID およびリレーションシップを管理します。さらに、オブジェクトをシリアル化したり、コントロールにバインドしたりすることもできます。詳細については、「オブジェクトの使用 (Entity Framework)」を参照してください。
クイック スタートからの次の例では、Department オブジェクトに関連する Course オブジェクトのコレクションを取得し、DataGridView コントロールにバインドします。
' Get the object for the selected department.
Dim department As Department = _
CType(Me.departmentList.SelectedItem, Department)
' Bind the grid view to the collection of Course objects
' that are related to the selected Department object.
courseGridView.DataSource = department.Course
// Get the object for the selected department.
Department department =
(Department)this.departmentList.SelectedItem;
// Bind the grid view to the collection of Course objects
// that are related to the selected Department object.
courseGridView.DataSource = department.Course;
Entity Framework は、エンティティ データへの変更を追跡し、変更をデータ ソースに反映できるようにします。クイック スタートからの次の例では、オブジェクト コンテキストにおける変更がデータベースに書き込まれます。
' Save object changes to the database, display a message,
' and refresh the form.
numChanges = schoolContext.SaveChanges()
// Save object changes to the database, display a message,
// and refresh the form.
numChanges = schoolContext.SaveChanges();
詳細については、「オブジェクトの追加、変更、および削除 (Entity Framework)」を参照してください。
ストアド プロシージャを使用して、データ ソースでデータを挿入、更新、および削除する EDM を定義できます。これらのストアド プロシージャは、概念モデルのエンティティにマップされます。詳細については、「ストアド プロシージャのサポート (Entity Framework)」を参照してください。
参照
概念
LINQ to Entities の例
Entity Data Model の型
Entity Data Model のリレーションシップ
その他のリソース
Object Services (Entity Framework)
アプリケーションのシナリオ (Entity Framework)