連載:ADO.NET Entity Framework入門

第5回 POCOによるエンティティ・クラス

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

POCOによるエンティティ・クラスの作成

 それでは、前回までのサンプルを元に、Visual Studio 2010でPOCOによるエンティティ・クラスを作成してみよう。

■Entity Framework依存のエンティティ・クラス定義の削除

 まず、本連載でこれまでに使用してきたEDM(エンティティ・データ・モデル)であるAddressBook.edmxファイルから、自動生成されたエンティティ・クラスを削除しよう。

 AddressBook.edmxをVisual Studioのコード・エディタで開き、図2のように[プロパティ]ウィンドウで[コード生成方法]を「既定」から「なし」に変更する。これにより、EDMから自動生成された、Entity Framework依存のエンティティ・クラス定義は削除される。


図2 EDMの[プロパティ]ウィンドウ
[コード生成方法]を「既定」から「なし」に変更する。

■POCO Entity Generatorによるエンティティ・クラスの生成

 次に、POCOによるエンティティ・クラスを実装しよう。

 Visual Studio 2010は標準ではPOCOによるエンティティ・クラスの自動生成機能を持っていないが、Visual Studio 2010用の拡張機能として公開されている「ADO.NET C# POCO Entity Generator」または「ADO.NET VB POCO Entity Generator」(以下、POCO Entity Generator)をインストールすることで、EDMからPOCOによるエンティティ・クラスを自動生成できる。もちろん手動でエンティティ・クラスを実装することも可能であるが、省力化のためEDMからの自動生成を推奨しておく。

 まず、ADO.NET Entity Data Modelツール上で右クリックし、図3のように[コード生成項目の追加]を選択する。


図3 [コード生成項目の追加]を選択
ADO.NET Entity Data Modelツール上で右クリックすると表示されるメニュー。

 表示された[新しい項目の追加]ダイアログ(図4)では、EDMからコードを生成する方法を選択できる。今回は左側の[オンライン テンプレート]をクリックし、使用する言語に合わせて「ADO.NET C# POCO Entity Generator」または「ADO.NET VB POCO Entity Generator」の項目をダブルクリックしてインストールする。なお、C#、VBで別々の拡張機能となっているが、機能などはほぼ同等であるため、以降のキャプチャ画面はC#版のみを掲載する。


図4 拡張機能のインストール(C#版)
使用する言語に合わせて「ADO.NET C# POCO Entity Generator」または「ADO.NET VB POCO Entity Generator」をインストールする。

 ちなみに、執筆時点では[オンライン テンプレート]をクリックすると、ランク順で最上位に表示されていたが、個別に探す場合には、左側の[テンプレート]−[データベース]を選択することで、目的の拡張機能にたどり着けるだろう。

 インストール中に図5のような確認画面が表示される場合には、[インストール]ボタンをクリックして進んでいこう。


図6 拡張機能のインストールの際に表示される確認画面(C#版)

■生成されたPOCOによるエンティティ・クラスの確認

 インストール完了後、ダイアログの[追加]ボタンでPOCOによるエンティティ・クラスを生成することができる。

 ソリューション・エクスプローラを確認すると、図7のように「Model1.context.tt」と「Model1.tt」というファイルの下に、エンティティ・クラスおよびオブジェクト・コンテキストが生成されているのが分かる。

図7 生成されたエンティティ・クラス(左:C#、右:VB)

【コラム】T4テンプレート

 図7を見ると分かるとおり、POCO Entity GeneratorによるEDMからのコード生成の際に、エンティティ・クラスだけでなく、Model1.ttなどの「.tt」拡張子を持ったファイルが生成されている。これらはT4(Text Template Transformation Toolkit)と呼ばれる、Visual Studioの持つテンプレート機能を用いたテンプレート定義ファイルである。

 それぞれのファイルには、C#、VBのコードを生成するためのテンプレートが記述されており、それに沿ってEDMからのコード生成が行われている。

 T4の詳細については、MSDNなどの情報源を参考にしてほしい。

 例えばエンティティ・クラスの定義であるEntry.cs/Entry.vbファイルの内容(リスト2に抜粋)を見れば、Entity Frameworkのクラスに関連するコードが存在しない、POCOであることが確認できる。

// Entryエンティティ・クラス定義
public partial class Entry
{
  // 各プロパティが、C#のプロパティとして定義されている
  // 特別な属性などは付加されていない
  public virtual int ID
  {
    get;
    set;
  }

  public virtual string Name
  {
    get;
    set;
  }

  public virtual short Age
  {
    get;
    set;
  }

  ……

' Entryエンティティ・クラス定義
Partial Public Class Entry

  ' 各プロパティが、VBのプロパティとして定義されている
  ' 特別な属性などは付加されていない
  Public Overridable Property ID As Integer

  Public Overridable Property Name As String

  Public Overridable Property Age As Short

  ……

リスト2 POCOによるエンティティ・クラスの定義内容(上:Entry.cs、下:Entry.vb)


 INDEX
  ADO.NET Entity Framework入門
  第5回 POCOによるエンティティ・クラス
    1.POCOと永続性非依存(Persistence Ignorance)原則
  2.POCOによるエンティティ・クラスの作成/【コラム】T4テンプレート
    3.生成されたオブジェクト・コンテキスト・クラスの確認/【コラム】コード・ファースト
 
インデックス・ページヘ  「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 記事ランキング

本日 月間