連載:ADO.NET Entity Framework入門

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

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

EDMの作成と論理モデルの生成

 それでは、Visual Studioを使って、先ほど仕様を列挙したアドレス帳アプリケーションのEDMを作成してみよう。本連載では以下の環境でサンプル作成を行っている。

  • Visual Studio 2010(以降、VS 2010)
  • SQL Server 2008 Express

 まず、VS 2010のIDEを起動し、プロジェクトを新規作成する。プロジェクトの種類としては、[新しいプロジェクトの追加]ダイアログの[Windows Forms]カテゴリから[コンソール アプリケーション]テンプレートを選択する。プロジェクト作成後は、EDMを作成するため、VS 2010のメニューバーから[プロジェクト]−[新しい項目の追加]を実行する。これにより開かれる[新しい項目の追加]ダイアログで、図5のように[ADO.NET Entity Data Model]を選択し、「AddressBook.edmx」という名前でEDMを作成する。「.edmx」という拡張子はEDMの定義ファイルを表しており、実体は前述のCSDL、SSDL、MSLの記述を含むXMLファイルである。


図5 プロジェクトへのEDMの追加

 EDMを追加すると、続けて図6のように[Entity Data Model ウィザード]が開始される。[モデルに含めるコンテンツ]の左にある[データベースから生成]という項目を選ぶと、既存のデータベースの構造を基にEDMが自動生成され、右の[空のモデル]を選ぶと、何もない状態からEDMを作成していくことができる。今回は[空のモデル]を選択しよう。


図6 [Entity Data Model ウィザード]の開始画面

 EDMを追加すると、図7のようなEDMのデザイン画面(ADO.NET Entity Data Modelツール)が表示される。


図7 ADO.NET Entity Data Modelツール

 このツールでは、Windowsアプリケーション/WebアプリケーションのUIを構築する場合と同様に、左のツールボックス(図8)から、エンティティ、アソシエーション、継承などのパーツをドラッグ&ドロップで配置できる。


図8 ADO.NET Entity Data Modelツールのツールボックス

 さっそくエンティティを作成するのだが、その前に、デザイン画面上で右クリックして表示されるコンテキスト・メニューから[プロパティ]を選択し、EDMのプロパティを設定しておこう。

 ここでは図9のように、[新しいオブジェクトの複数化]プロパティをTrueに設定する。これはモデル名の単数形/複数形を変換してくれる、.NET 4からのEntity Frameworkの新機能だ(具体的な動作については後述)。


図9 [新しいオブジェクトの複数化]プロパティをTrueに設定

■EDMの作成

 それではまずは、アドレス帳アプリケーションのアドレス帳エントリを作成しよう。ツールボックスから[エンティティ]をドラッグ&ドロップし、[プロパティ]ウィンドウの[名前]欄を「Entry」とする(図10)。ここで、[プロパティ]ウィンドウの[エンティティ セット名]が自動的に入力され、「Entries」と複数形になっていることに注目してほしい。

 ここで設定したエンティティの名前は、自動生成されるC#やVisual Basicのクラス名に対応する。また、エンティティ・セット名は、実際のリレーショナル・データベース上のテーブル名に対応する(EDMからデータベースを作成する場合)。


図10 Entryエンティティの追加
エンティティ名として入力した「Entry」が[エンティティ セット名]では自動的に複数形である「Entries」になっている。

 前述のとおり、.NET 4より、概念モデルのエンティティの名前(=クラス名)と、エンティティ・セット名(=リレーショナル・モデルのテーブル名)の単数形/複数形の使い分けがサポートされるようになった。これは、一般的な命名則として、クラスの名前は基本的に単数形で表されるのに対し、テーブル名は複数形で表されることが多いためである。

 .NET 4以前は、エンティティ名とエンティティ・セット名が共通であったため、既存のデータベースからEDMを自動生成すると、クラス名がテーブル名と同じ複数形で表されることになり、命名規則に沿わないクラスが多数生成されていた。.NET 4より、EDMからデータベースを作成する場合でも、既存のデータベースからEDMを作成する場合(次回以降で紹介)でも、単数形/複数形を正しくサポートするようになった。

 さて、続けてEntryエンティティにプロパティを追加しよう。エンティティ上で右クリックし、表示されるコンテキスト・メニューから[追加]−[スカラー プロパティ]を選択する。なお、スカラー・プロパティとは文字列型、数値型、日付型など、データベースの1つのフィールドに直接対応付けることができるプロパティである。ちなみに、Entity Frameworkでは、データベースの複数のフィールドに対応する複合型プロパティも扱うことができる。

 今回は図11のように、Name(名前)、MailAddress(メール・アドレス)、TelNo(電話番号)、Age(年齢)という4つのスカラー・プロパティを追加する。


図11 4つのスカラー・プロパティの追加

 それぞれのスカラー・プロパティについては、[プロパティ]ペインで型情報などを設定できる。例えば、Nameプロパティの文字列長を20文字に制限してみよう。これにはNameプロパティを選択した後、図12のように[ファセット]−[最大長]に「20」を入力する。


図12 Nameプロパティの[最大長]を「20」に設定

 また、Ageプロパティは年齢を表すので、図13のように[型]を「Int16」に変更する。


図13 Ageプロパティの[型]を「Int16」に設定

 スカラー・プロパティについては、[プロパティ]ペインでは以下の表2のような項目を設定できる。

項目 意味
スカラー・プロパティのCLR型。文字列、数値、日付などから選択
既定値 値未設定時のデフォルト値
Null許容 値を設定しない状態(Null)を許可するかどうか
固定長 文字列の場合に、固定長文字列とするかどうか
最大長 文字列の場合の最大文字数
表2 スカラー・プロパティで設定可能な主な項目

 以上でEDMの設計は完了だ。ここではCSDL、SSDL、MSLを目にすることはなかったが、AddressBook.edmxファイルを直接閲覧すれば、XML形式でCSDL、SSDL、MSLが自動生成されていることを確認できる。


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

本日 月間