Entity Framework

Entity Frameworkは、データ指向のソフトウェアアプリケーション開発をサポートするADO.NETのデータアクセス技術。.NET Framework 3.5 SP1より、標準ライブラリとして導入された。

概要 
従来技術の課題として、データアクセスモデルにおけるインピーダンスミスマッチがあった。つまり、開発アプリケーションのオブジェクト指向言語とRDBMSとの構造の違いにより、開発生産性を著しく低下させる原因になっていた。この問題に対して独自のデータモデル(Entity Data Model)により、標準ライブラリのみでデータアクセスの課題を解決できるようになった。

Entity Frameworkは概念モデルを導入することで、アプリケーション内のオブジェクトとデータベースの論理モデルとの間を仲立ちするようにマッピングを行う。開発者はEntity Framework上で定義したEntityに対してクエリを実行し、Entity Framework がそれらの操作をデータベース固有のコマンドに変換することでモデルが活用される。 これにより、特定のデータベースへの依存関係をアプリケーションにハードコーディングしなくても済むようになる。

背景 
従来のアプリケーション開発において、オブジェクト指向プログラミングとリレーショナルデータベースの組み合わせはデファクトスタンダードとなっていた。ところが.NET Frameworkでは、長らくこのインピーダンスミスマッチを解決するための技術は提供されていなかった。.NET Frameworkを使用していた開発者の多くは時間と労力をかけて相互にマッピングするコーディングを行うか、NHibernateやiBatis.NETなどのサードパーティによるO/R（Object-Relational）ラッパーを組み合わせて効率化を図らなければならなかった。

マイクロソフトは2007年、.NET framework 3.5のリリースにこのEntity Frameworkを標準ライブラリとして組み込んだ。Entity Frameworkはデータベースのビジネス要件を満たしつつ、効率的で保守しやすいプログラムコードを記述するという双方のバランスを、O/Rマッピングとは異なるアプローチをとって解決した。 「概念モデル」というデータモデルを導入することで開発者はデータを操作するときに、より抽象化されたオブジェクト（＝エンティティ）で作業ができ、従来よりコードの少ないアプリケーションの作成と保守が可能になった。

技術

概念モデル 
概念モデル (:en:conceptual model) とは、データ設計の過程において、システム上で必要となるデータを実体 (エンティティ) と関連 (リレーション) で定義するデータモデル。一般的なデータ設計ではここからさらに論理モデルへ落とし込みこれをオブジェクト指向プログラミング上のオブジェクトとして扱い、さらに物理モデルがデータベース内の実データとして扱われるが、Entity Frameworkでは概念モデルのレベルでデータを扱うことで、開発者がより低いレベルにあるデータモデルを意識せずにコーディングができる。実装はドメイン固有言語 (DSL) の一種である概念スキーマ定義言語 (CSDL) で記述される。

Entity Data Model(EDM) 
Entity Frameworkにおいて、概念モデルと論理モデル、そしてこれらのマッピングを含めたデータモデルを総称してEntity Data Model(EDM)と呼ぶ。ビジネス要件上、リレーショナルデータベース以外でもテキストファイルやXMLファイルなどさまざまな形式のデータを扱えるようにしたい課題があった。従来はそれぞれのデータ形式に対応するコーディングを開発者が行わなければならなかった。この問題をEDMが解決している。概念スキーマ定義言語を用いてデータ形式問わずにデータから概念モデルへマッピングすることができ、これによりさまざまなデータに対しスケーラビリティの効率性を損なうことなく、効率的で保守性に優れたコードを作成することが可能となる。

開発アプローチ 
 データベースファースト : 既存のデータベースからデータモデルを自動生成するアプローチ。
 モデルファースト : デザイナーUI上で定義したEntity Data Modelからデータベースを自動生成するアプローチ。
 コードファースト : POCOからデータベースを自動生成するアプローチ。

マイグレーション 
開発中にデータモデルの変更（データベースのテーブルレイアウト変更など）が発生した場合、アプリケーション内のオブジェクトとデータベース構造を両方に変更を施すことで全体の整合性を保つ機能。Entity Frameworkでは自動的にデータモデルの変更を検知して常に最新の状態へ移行する自動マイグレーションと、コマンドを発行することで任意のタイミングで移行を実行してくれるコードベースマイグレーションがある。

注釈

関連項目 
 統合言語クエリ
 ADO.NET
 実体関連モデル
 データモデル
 .NET Framework

エンティティ
データベース
マイクロソフトのAPI
.NET Framework
マイクロソフトのフリーソフト