エンティティ データの使用
Entity Framework は、概念モデルとストレージ モデル メタデータをモデル間のマッピングと共に、クライアント ビューと呼ばれる Entity SQL ステートメントの双方向のペアにコンパイルします。 これらのビューは、ランタイム エンジンでのクエリと更新の処理を実行します。 ビューを生成するマッピング コンパイラは、デザイン時、または概念モデルに対して最初のクエリが実行される実行時に呼び出すことができます。
Entity Framework は、基になるデータ プロバイダーおよびデータ ソースに EntityConnection を提供することにより、ストレージ固有の ADO.NET データ プロバイダーに基づいて構築されます。
クエリが実行されると、それが解析され、クエリのオブジェクト モデル表現である正規コマンド ツリーに変換されます。 正規コマンド ツリーは、SELECT、UPDATE、INSERT、および DELETE コマンドを表します。 後続の処理はすべてコマンド ツリーで実行されます。コマンド ツリーは System.Data.EntityClient データ プロバイダー、および System.Data.SqlClient など、基になる .NET Framework データ プロバイダー間の通信手段です。
次の図は、データにアクセスするための Entity Framework アーキテクチャを示しています。
オブジェクトのクエリ
ADO.NET Entity Data Model ツールは、概念モデルで定義したエンティティ コンテナーを表す ObjectContext から派生したクラスを生成します。 ObjectContext クラスは、エンティティをオブジェクトとして返す概念モデルに対するクエリの他に、エンティティ オブジェクトの作成、更新、および削除をサポートします。 Entity Framework は概念モデルに対するオブジェクト クエリをサポートします。 クエリは、Entity SQL 、統合言語クエリ (LINQ)、およびオブジェクト クエリ ビルダー メソッドを使用して構築できます。
概念モデルでは、エンティティはアソシエーションによって相互に関連します。 オブジェクト レイヤーでは、これらのアソシエーションは、エンティティ参照に基づいて関連するオブジェクトのコレクションを公開するプロパティによって表します。 たとえば、School モデルでは、Department.Course は、Course と Department 間のアソシエーションに基づいて、Course オブジェクトのエンティティ コレクションを取得します。 ObjectContext クラスの LazyLoadingEnabled プロパティが false に設定されている場合、参照されたオブジェクトは自動的に読み込まれないため、エンティティ参照で Load メソッドを呼び出し、オブジェクト コンテキストに関連するオブジェクト データを読み込む必要があります。
注 : |
---|
Entity Data Model デザイナーを使用してオブジェクトレイヤー コードを生成した場合、ObjectContext クラスの LazyLoadingEnabled プロパティは既定で true に設定されます。 |
また、返されたオブジェクトと共に読み込む関連オブジェクトを定義するクエリ パスを指定することもできます。 詳細については、「概念モデルに対するクエリ (Entity Framework)」を参照してください。
クイック スタートからの次の例では、実行されたクエリはすべての Department オブジェクトを取得することを示しています。 クエリ パスの定義により、Department オブジェクトに関連する Course オブジェクトも必ず返されます。 Entity SQL ORDER BY 句は、返されたオブジェクトを Name によって順序付けます。
' Define a query that returns all Department objects
' and related Course objects, ordered by name.
Dim departmentQuery As ObjectQuery(Of Department) = _
From d In schoolContext.Departments.Include("Courses") _
Order By d.Name _
Select d
// Define a query that returns all Department
// objects and course objects, ordered by name.
var departmentQuery = from d in schoolContext.Departments.Include("Courses")
orderby d.Name
select d;
詳細については、「概念モデルに対するクエリ (Entity Framework)」を参照してください。
ストアド プロシージャを使用して、データ ソースでクエリを実行する一連のモデルを定義できます。 これらのストアド プロシージャの結果セットは、概念モデルのエンティティにマップされます。 詳細については、「How to: Import a Stored Procedure」を参照してください。
オブジェクトの使用
オブジェクト コンテキスト内のオブジェクトは、データ ソース内のデータのエンティティ型の表現です。 オブジェクトは、オブジェクト コンテキストで変更、作成、および削除することができます。 オブジェクト コンテキストは、オブジェクト間の 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.Courses
//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.Courses;
Entity Framework は、エンティティ データへの変更を追跡し、変更をデータ ソースに反映できるようにします。 クイック スタートからの次の例では、オブジェクト コンテキストにおける変更がデータベースに書き込まれます。
' Save object changes to the database,
' display a message, and refresh the form.
schoolContext.SaveChanges()
詳細については、「オブジェクトの作成、追加、変更、および削除 (Entity Framework)」を参照してください。
ストアド プロシージャを使用して、データ ソースでデータを挿入、更新、および削除する概念モデルを定義できます。 これらのストアド プロシージャは、概念モデルのエンティティにマップされます。 詳細については、「Walkthrough: Mapping an Entity to Stored Procedures」を参照してください。