連載:Entity Framework 4.1入門

第1回 EF 4.1の目玉機能「コード・ファースト」を理解しよう

WINGSプロジェクト 土井 毅(監修:山田 祥寛)
2011/06/03
Page1 Page2 Page3

Entity Framework 4.1の概要

 2011年4月11日、ADO.NETのコンポーネントであるEntity Framework(以降、EF)の新しいバージョン4.1がリリースされた。バージョン番号の増分は以前の「4」から「0.1」だけであるが、EF 4.1にはそれまでのバージョンにはない、「コード・ファースト」という新しい開発スタイルが追加され、より簡潔なコードでデータベース開発を行えるようになった。

 EF 4.1の主な新機能は以下の2つである。

(1)新しい開発スタイルであるコード・ファーストのサポート
 ソース・コードのみでデータベースの設計まで行えるコード・ファーストは、本連載で主に扱うEF 4.1の目玉ともいえる機能である。以下のような機能が含まれている。

  • 規約に基づくソース・コードとデータベースの関連付け(第1〜2回で解説)
  • ソース・コードとデータベースの関連付けをカスタマイズするためのFluent API(第3回で解説)
  • ソース・コードへのアノテーションによる検証機能(「連載:ASP.NET MVC入門【バージョン3対応】」を参照)

(2)より軽量なコンテキスト・クラスであるDbContextのサポート
 EF 4までは、データベースへの接続やデータの入出力の際に使用するコンテキスト・クラスの継承元として、ObjectContextというクラスを使用してきたが、EF 4.1ではより軽量なコンテキスト・クラスとしてDbContextというクラスが導入された。
 DbContextクラスはコード・ファーストのみならず、EF 4までのデータベース・ファーストやモデル・ファースト(後述)においても使用可能であり、自己追跡エンティティや同時実行制御などの機能をEF 4よりもシンプルに記述できる。DbContextについては、次回以降、改めて解説していく。

 なお、Entity Frameworkとは、.NET Framework 3.5からADO.NETに追加された、新しいデータ・アクセス技術である。以前のADO.NETからの大きな相違点として、Entity Frameworkはデータベースの構造をそのままアプリケーションから扱うのではなく、Entity Data Model(EDM)と呼ばれるモデルを経由して使用する。EDMは「概念モデル」とも呼ばれ、データベースの表形式の構造にとらわれない、オブジェクト指向言語から扱いやすいモデルである。

 以下では、EF 4.1のコード・ファーストについて詳しく説明していく。本連載では、Entity Frameworkに関する基礎知識がすでにあることを前提とする。Entity Frameworkの詳細については、以前の連載「ADO.NET Entity Framework入門」を参照していただきたい。

Entity Frameworkに新たに追加された「コード・ファースト」開発

 さて、EF 4.1の新機能であるコード・ファーストという開発スタイルを、EF 4までの開発スタイルと比較してみよう。

 図1は、EF 4.1で使用可能な3種類の開発スタイルの概要を示したものである。

図1 EFでの開発スタイル

 最初に取り上げるのは「データベース・ファースト」と呼ばれる開発スタイルである。データベース・ファーストはEF登場時からサポートされており、すでに存在するデータベースからEDMを生成する開発スタイルである。データベースの構造からEDMをいわば逆算して構築するため、「リバース」と呼ばれることもある。このスタイルでは、すでに存在するデータベースに手を加えることなく、プログラムからアクセスするためのモデルを構築できる。

 「モデル・ファースト」とは、EF 4から追加された開発スタイルであり、まずEDMを設計し、そこからデータベース構造を自動生成する方法である。EDMは図2のようにビジュアルにデザインが可能なモデルであり、表形式の構造に基づくデータベースの限界を気にすることなく設計可能である。例えば、データベース上では中間テーブルが必要になる多対多関係なども、EDM上ではそのまま表現することができる。

図2 EDMのビジュアル設計

 データベース・ファースト、モデル・ファースト、いずれの場合でも、実際のプログラムからEDMを使用する際には、「エンティティ・クラス」と呼ばれる、データベースのフィールドをプロパティとして持つクラスを使って処理を行う。データベース・ファーストと、モデル・ファーストのそれぞれの手法により、既存のデータベースがある場合と、新たにデータベースを設計する場合の両方に対応できる。

 EF 4.1の新機能である「コード・ファースト」は、これら2つの手法とは発想の異なる開発スタイルである。コード・ファーストでは、最初にPOCO*1としてエンティティ・クラスを定義し、そこから必要に応じてデータベースを自動生成する。データベース・ファーストやモデル・ファーストとは異なり、ソース・コードだけで開発を完結できるため、ビジュアルなエディタでEDMを明示的に定義する必要がなく、より迅速な開発が可能となる。また、特定のフレームワークに依存していないPOCOのエンティティ・クラスは、テストの記述、実行も容易である。

*1 POCOは「Plain-Old CLR Object」の略で、特別なクラスやインターフェイスを継承していないクラスのこと。

 コード・ファーストにおいては、Ruby on Railsなどのフレームワークで採用されている「設定に勝る規約(Convention over Configuration:CoC)」の思想が取り入れられている。.NET Frameworkにおいては、XML形式の設定ファイルにさまざまな設定を記述するケースが多いが、コード・ファーストにおいては、規約に沿ったソース・コードを記述する限り、設定ファイルなどで明示的に設定を行う必要はほとんどなくなっている。

 コード・ファーストは、やはりRuby on Railsなどのフレームワークの影響を色濃く受けているASP.NET MVCとの相性が抜群に良く、データベースを使用したWebアプリケーションの構築を迅速に行える。コード・ファーストとASP.NET MVCの組み合わせについては、「ASP.NET MVC入門 第2回 Entity Frameworkコード・ファーストでモデル開発」を参照していただきたい。本連載では、主にコンソール・アプリケーション・ベースで、EF 4.1の機能の詳細について解説していく。

 なお、EFのこうした開発スタイルの違いは、あくまでもモデルをどのように作成するか、というアプローチの違いだけであり、実際にアプリケーションがデータベースにアクセスする際のコードにはほとんど影響を及ぼすことはない。後述するように、エンティティ・クラスにアクセスするためのコードは、どの開発スタイルにおいても基本的に共通である。既存のデータベースがあるかないか、モデルをビジュアルにデザインするか、ソース・コードだけで完結させるか、といった状況に応じて適切な開発スタイルを選択してほしい。

[コラム]コード・ファーストと既存のデータベース

 その名称からして、コード・ファースト開発スタイルでは、ソース・コードからデータベース構造を自動生成するのが前提で、既存のデータベースには適用できないように思われる。しかし実際には、コード・ファーストにおいてデータベース構造の自動生成は必須ではなく、既存のデータベースと組み合わせて活用することも可能である。

 興味深いことに、コード・ファーストはプロトタイプ開発時点では「コード・オンリー(Code Only)」と呼ばれていたようである。つまり、コード・ファーストとは、データベース・ファーストやモデル・ファーストとは異なり、EDMを明示的に定義する必要なく、ソース・コードだけ(コード・オンリー)ですべてが完結する、という意味である。

 これから解説するように、データベースがすでに存在する場合においても、コード・ファースト開発スタイルは非常に有用であるため、ぜひ活用していただきたい。

 それでは次のページから実際にEF 4.1を試していこう。

 

 INDEX
  [連載]Entity Framework 4.1入門
  第1回 EF 4.1の目玉機能「コード・ファースト」を理解しよう
  1.Entity Framework 4.1の概要
    2.環境構築/コード・ファーストによるサンプルの実装:モデルの定義
    3.モデルを使ったサンプルの実装/データベース上のデータの確認

インデックス・ページヘ  「連載:Entity Framework 4.1入門」


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 記事ランキング

本日 月間