Entity Framework
Entity Frameworkは、
.NET Frameworkでデータ指向アプリケーション開発を支援するADO
.NETのデータアクセス技術です。
.NET Framework 3.5 SP1から標準
ライブラリとして導入されました。
概要
従来のデータアクセス技術では、オブジェクト指向言語とリレーショナルデータベース(RDB)の構造の違い、いわゆるインピーダンスミスマッチが課題でした。この問題は、開発の生産性を著しく低下させる原因となっていました。Entity Frameworkは、独自の
データモデルであるEntity Data Model(EDM)を導入することで、これらの課題を標準
ライブラリのみで解決できるようにしました。
Entity Frameworkは、概念モデルを導入することで、アプリケーション内のオブジェクトとデータベースの論理モデル間のマッピングを仲介します。開発者は、Entity Framework上で定義されたエンティティに対してクエリを実行し、Entity Frameworkがこれらの操作をデータベース固有のコマンドに変換します。これにより、特定のデータベースへの依存をアプリケーションに
ハードコーディングする必要がなくなり、より柔軟な開発が可能になります。
背景
従来のアプリケーション開発では、
オブジェクト指向プログラミングとリレーショナルデータベースの組み合わせが一般的でした。しかし、
.NET Frameworkでは長らくこのインピーダンスミスマッチを解決する技術が提供されていませんでした。そのため、開発者はデータマッピングのコードを自ら記述するか、NHibernateやiBatis
.NETなどのサードパーティ製O/Rマッパーを利用して効率化を図る必要がありました。
マイクロソフトは
2007年に、
.NET Framework 3.5のリリースに合わせてEntity Frameworkを標準
ライブラリとして組み込みました。Entity Frameworkは、O/Rマッピングとは異なるアプローチで、データベースのビジネス要件を満たしつつ、効率的で保守しやすいプログラムコードを記述するという双方のバランスを解決しました。概念モデルという
データモデルを導入することで、開発者はデータを操作する際に、より抽象化されたオブジェクト(エンティティ)で作業でき、従来よりもコード量の少ないアプリケーション開発と保守を可能にしました。
技術
概念モデル
概念モデルとは、データ設計の過程で、システムに必要なデータをエンティティとリレーションとして定義する
データモデルです。一般的なデータ設計では、概念モデルから論理モデル、さらに物理モデルへと落とし込みますが、Entity Frameworkでは概念モデルのレベルでデータを扱えます。これにより、開発者はより低いレベルの
データモデルを意識せずにコーディングできます。実装には、
ドメイン固有言語(DSL)の一種である概念スキーマ定義言語(CSDL)が使われます。
Entity Data Model (EDM)
Entity Frameworkにおいて、概念モデル、論理モデル、そしてこれらのマッピングを総称してEntity Data Model(EDM)と呼びます。ビジネス要件として、リレーショナルデータベースだけでなく、テキストファイルやXMLファイルなど様々な形式のデータを扱いたいというニーズがありました。従来は、それぞれのデータ形式に対応したコードを開発者が記述する必要がありましたが、EDMはこの問題を解決します。概念スキーマ定義言語を用いてデータ形式に関わらず概念モデルにマッピングできるため、様々なデータに対して、
スケーラビリティを損なうことなく、効率的で保守性の高いコードを作成できます。
開発アプローチ
Entity Frameworkには、主に以下の3つの開発アプローチがあります。
データベースファースト: 既存のデータベースからデータモデルを自動生成するアプローチです。
モデルファースト: デザイナーUI上で定義したEntity Data Modelからデータベースを自動生成するアプローチです。
コードファースト: POCO(Plain Old CLR Objects)クラスからデータベースを自動生成するアプローチです。
マイグレーション
開発中にデータモデルの変更(データベースのテーブルレイアウトの変更など)が発生した場合、アプリケーション内のオブジェクトとデータベース構造の両方に変更を適用し、全体の整合性を保つ機能です。Entity Frameworkには、データモデルの変更を自動的に検知して最新の状態に移行する自動マイグレーションと、コマンドを実行して任意のタイミングで移行を行うコードベースマイグレーションがあります。
注釈
Entity Frameworkは、データアクセスに関する様々な課題を解決し、開発効率と保守性を向上させる強力なツールです。開発者は、概念モデルという抽象化されたレベルでデータを扱うことで、複雑なデータアクセス処理をより簡単に実装できます。
関連項目
統合言語クエリ(LINQ)
ADO.NET
実体関連モデル(ERモデル)
データモデル
.NET Framework