<目次>
(1) Entity Frameworkとは?概要や仕組みについて
(1-1) Entity Frameworkとは?
(1-2) オブジェクトとテーブルが1:1対応しない場合
(1-3) Entity Frameworkの技術的な概要
(1-4) Entity Frameworkの導入方法
(1) Entity Frameworkとは?概要や仕組みについて
(1-1) Entity Frameworkとは?
「Entity Framework」は「.NET Framework」における標準の「O/Rマッパー」です。「O/Rマッパー」というのは「インピーダンスミスマッチ」と呼ばれる、オブジェクト指向言語とリレーショナルデータベースとの間の構造の「差異」を吸収するための「O/Rマッピング」の技術やそのためのライブラリを指します。
「O/Rマッピング」では具体的には、リレーショナルデータベースのテーブルの各列と、オブジェクトのプロパティ(クラスのメンバ変数)とを1対1に紐づけていきます。
(図111)
O/Rマッパーが無いと、このDB←→クラスの間のデータのやり取りを1カラムずつ自分でマッピングする必要がありますが、O/Rマッパーではこのような面倒で煩雑な作業を自動的に処理してくれます。
上記記事ではEntity Frameworkを使わないサンプルプログラムを紹介しており、若干分かりにくいですが、SQLConnection⇒SQLCommand⇒SQLDataReaderとインスタンスを生成していき、最終的には各カラムの情報(reader[0],[1],[2])をコンソールに表示しています。この「reader[0]」「reader[1]」「reader[2]」をオブジェクトの各変数(プロパティ)にマッピングしていく作業が非常に手間で、Entity Frameworkが自動化してくれる部分です。
この結果として、アプリケーションの開発者はデータベースのテーブルやカラムの構造をそこまで意識する事なく、より簡潔なコードを組む事ができます。
(1-2) オブジェクトとテーブルが1:1対応しない場合
ただしEntity Frameworkにおいては、オブジェクト(アプリ側)とテーブル(DB側)が必ず1対1にならないことを考慮して「エンティティ」と呼ばれる、テーブルとアプリケーション側のオブジェクトの中間に位置するようなモデル(概念モデル)を導入して、エンティティ経由でのデータベースアクセスを可能にしています。エンティティとテーブルをひっくるめたモデルを総称して「Entity Data Model」と呼んでいます。
(図121)エンティティとテーブルの関係イメージ
図の通り、アプリケーション側の「オブジェクト」とデータベース側の「テーブル」との間に「エンティティ」を介する事によって、アプリケーション側はデータベース側の事情によるテーブル構造(中間テーブルなど)を意識する事なくDBアクセスが可能になります。
上図の例では、「エンティティ」(概念モデル)はデータベースのテーブル(論理モデル)に直接マッピングされており、実際はデータベースには「中間テーブル」がある事を意識せずにアクセスできています。
そのために、EntityFrameWork側ではテーブル同士の対応関係のみを定義しています。図の例では「Document」(例:領収書)と「Field」(例:品名、金額)の間はM:Nの関係ですが、中間テーブルを持たない代わりに、そのDocumentとFieldの対応関係(M:N)のみを保持する事で、紐付けを可能にしています。
(1-3) Entity Frameworkの技術的な概要
Entity Frameworkの中心となるのは「DBContext」と呼ばれるクラスで、アプリケーション⇒データベースへのゲートウェイの役割を果たします。DBContextには1つ以上の「DBSet」が紐づき、これはDBのテーブルに相当するオブジェクトになります。
(図131)
DbSetに対するクエリはアプリケーション側(C#など)からLINQによるクエリを発行し、Entity FrameworkがLINQをランタイム(実行時)にSQLへと変換し、DBに対してクエリを発行します。
(図132)
そしてDB接続 ⇒ クエリ実行 ⇒ データをオブジェクトにマッピング ⇒ DBSetに追加といった処理を実行していきます。
以降DBSetに変更が入った時も同様で、DBSetとDBが同期されるようにEntity Frameworkが同期の処理を自動で行ってくれます。
(1-4) Entity Frameworkの導入方法