連載:ADO.NET Entity Framework入門

第1回 最新DBアクセス・フレームワークの基本的な考え方

WINGSプロジェクト 土井 毅 著/山田 祥寛 監修
2010/06/04
Page1 Page2 Page3 Page4

ADO.NET Entity Framework概要

 ADO.NET Entity Framework(以降、Entity Framework)とは、.NET Framework 3.5からADO.NETに追加された、新しい概念に基づくデータ・アクセス技術である。そして、2010年4月の.NET Framework 4(以降、.NET 4)のリリースに伴い、Entity Frameworkもバージョンアップし、多くの新機能を持つこととなった。

 しかし、Entity Frameworkは、これまでのデータ・アクセス技術とは異なるアプローチを採っているため、いま1つ理解しづらい技術だ、と感じる開発者も多いようだ。また、「すでに多くのソリューションが提供されているO/Rマッパーの新種だ」といった的確とはいえない理解も散見される。

 本連載では、Entity Frameworkの概要や基本的な考え方から始め、Entity Frameworkを使用したサンプル・プログラムを構築しながら、以下のような点について説明を進めていく。

  • Entity Data Modelとは
  • Entity Frameworkにおける3種類のアクセス手法
  • Entity FrameworkでのPOCO*1の使用
  • N層アプリケーションでのEntity Frameworkの活用
*1 「Plain-Old CLR Object」の略で、特別なクラスやインターフェイスを継承していないクラス(のオブジェクト)のこと。

 なお、本連載では.NET 4に搭載されたEntity Frameworkについて説明するが、基本的な概念の多くは.NET 4以前のEntity Frameworkにも共通したものである。そのような理由から、.NET 4からの新機能については適宜補足で説明していくものとする。

■アプリケーション開発で扱う3つのモデル

 Entity Frameworkのアプローチを考える前に、データベースを使用するアプリケーション開発の中で扱う3つのモデルである「概念モデル」「論理モデル」「物理モデル」について考えよう。以下のようなシンプルなアドレス帳アプリケーションの要件について、この3つのモデルで考える。

アドレス帳アプリケーション要件  
  • アドレス帳アプリケーションは複数のユーザーに対応し、ユーザーごとに複数のアドレス帳エントリが存在する

  • アドレス帳の各エントリには、氏名、住所、電話番号、メール・アドレスなどのデータ項目が含まれる

  • エントリは複数のカテゴリを持つことができる(エントリとカテゴリは多対多の関係になる)

  • エントリは名前順、またはカテゴリ別の表示を行えるようにする

  • エントリは氏名・メール・アドレスによる検索を行えるようにする

 まず、概念モデルとは、データの表現形式(リレーショナル・データベースのテーブルなど)に依存しない、アプリケーションで扱うデータをモデル化したものである。これは問題領域(=ドメイン)を直接モデル化したものであるため、ドメイン・モデルとも呼ばれる。

 概念モデルの設計には、しばしばエンティティ・リレーションシップ・モデルが用いられる。エンティティとは、データの実体(=オブジェクト指向プログラミングでのオブジェクトに相当)を表し、プロパティ(=オブジェクトのフィールドに相当)の集合体である。そして、リレーションシップはエンティティ間の関連を表す。

 先のアドレス帳アプリケーションでいえば、

  • ユーザー/アドレス帳エントリ/カテゴリを取り出してエンティティとする
  • それぞれの各データ項目をプロパティとする
  • 各エンティティ間の関連をリレーションシップで表現する

などの作業により、要件から概念モデルを設計する。

 次に、論理モデルとは、概念モデルを実際のデータ表現形式に合わせて変換したものである。一般的にはリレーショナル・データベースが用いられることが多いため、テーブルと主キー/外部キーなどを用いて論理モデルを設計する。

 大まかにいえば、エンティティをテーブルで、プロパティをテーブルのフィールドで、リレーションシップを外部キーで表現できる。ただし、論理モデルは実際のデータ表現形式に影響を受けるため、概念モデルを論理モデルとしてそのまま表現できない場合があることに注意が必要である。さらには、リレーショナル・データベースを用いる場合、正規化という作業を行わなければならない(正規化については「@IT/Database Expert:データモデル正規化の目的と役割」を参照)。

 アドレス帳アプリケーションでいえば、

  • ユーザー・テーブル、エントリ・テーブル、カテゴリ・テーブルを設計する
  • 各テーブルのリレーションシップを設定する
  • エントリとカテゴリは多対多の関係になるので正規化し、中間テーブルを用いて表現する

などの作業により、概念モデルから論理モデルを設計する。

 最後に、物理モデルとは、使用するデータベース製品に合わせ、論理モデルを修正したものである。物理モデルの設計に際しては、主にパフォーマンスを考慮した修正が行われ、インデックスの作成やパーティション分割などを行う。ここでは使用するデータベース製品専用の機能を用いることもある。

 アドレス帳アプリケーションでいえば、

  • エントリ検索に用いる項目にインデックスを作成する
  • ユーザーを軸にパーティション分割を行う

などの作業により、論理モデルから物理モデルを設計する。

 以上がアプリケーション設計における3種類のモデルである。これらを図にまとめると次のようになる。


図1 概念モデル/論理モデル/物理モデル

 一般的にアプリケーション開発を行う際、実装段階では論理モデルを用いてプログラミングを行うことが多い。データベース上のテーブルなどを意識したうえで、SQL文で各種データ操作を行う、といった方法である。

 一方、Entity Frameworkは論理モデルではなく、概念モデルによるプログラミングを実現するフレームワークである。では、論理モデルによるプログラミングと概念モデルによるプログラミングはどのように異なるのだろうか?

 

 INDEX
  ADO.NET Entity Framework入門
  第1回 最新DBアクセス・フレームワークの基本的な考え方
  1.ADO.NET Entity Framework概要
    2.論理モデルによるプログラミングと概念モデルによるプログラミング
    3.EDMの作成と論理モデルの生成
    4.論理モデルの自動生成
 
インデックス・ページヘ  「ADO.NET Entity Framework入門」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間