特集:Visual Studio 2008 SP1新機能解説(2)

.NETの新データアクセス・テクノロジ
「ADO.NET Entity Framework」

WINGSプロジェクト ナオキ/山田 祥寛
2008/11/28
Page1 Page2 Page3 Page4

EDMの作成と利用

 ここからは、実際にEDMを作成する手順と、EDMに対してクエリを発行する3種類の方法を確認していくことにしよう。なお、ここではEDMのクエリ結果をASP.NETのGridViewコントロールで表示しているが(図4)、もちろん、Entity FrameworkはWindowsアプリケーションをはじめとした.NETアプリケーションで利用することが可能である。


図4 サンプルの実行結果
Entity Frameworkを経由して取り出した結果を、ASP.NETのGridViewコントロールで表示する。

 それでは具体的な手順を見ていくことにしよう。なお、本サンプル・プログラムを動作させるに当たっては、無償で提供されているPubsデータベースを利用可能な状態にしておく必要がある。

[1]ADO.NET Entity Data Modelを追加する

 まずはEDMを作成していく。VS 2008を起動しWebサイトを作成した後に、ソリューション・エクスプローラ上で右クリックしてメニューより[新しい項目の追加]を選択し[新しい項目の追加]ダイアログを表示する。

 ここでテンプレートとして「ADO.NET Entity Data Model」を選択し、名前を「Pubs.edmx」と設定したうえで[追加]ボタンをクリックする。EDMのファイル名は自由に決められるが、拡張子は「.edmx」とする必要がある。


図5 [新しい項目の追加]ダイアログ
テンプレートとして「ADO.NET Entity Data Model」を選択し、名前を「Pubs.edmx」に設定する。

 続けてEntity Data Modelウィザードが起動する。まず「モデルに含めるコンテンツ」の設定では[データベースから生成]を選択して[次へ]ボタンを押す。


図6 Entity Data Modelウィザード(1)

 次にデータ接続の選択を行う。今回はpubsデータベースの接続設定を行い[次へ]ボタンを押す。ここでは、データセットの作成時などと同様に、接続文字列をWeb.Configに保存することが可能だ(Windowsフォームの場合はApp.Config)。このサンプルでは既定のまま保存しておこう。


図7 Entity Data Model ウィザード(2)

 最後にデータベース・オブジェクトの選択を行う。今回は「publishers」と「titles」のテーブルを選択し、[完了]ボタンを押す。これによりEDMが生成される。この際、内部的には、.NETのクラスが生成されるほか、前述したMSL/CSDL/SSDLのXML定義も生成される。


図8 Entity Data Modelウィザード(3)

 以上の手順をすべて行うと、以下のようなEntityデザイナの画面が表示される。


図9 Entityデザイナの画面

 正しくEDMが作成されていることを確認した後、保存する。これでEDMの準備は完了だ。

[2]新規のWebフォームを作成する

 続いて、EDMを使用する新規のWebフォーム(EntitySQL.aspx)を作成しておこう。今回は、コードビハインド側でデータアクセス・ロジックを記述し、GridViewコントロールにバインドを行うので、フォーム・デザイナではGridViewコントロールを配置するだけだ。

■Entityデザイナの構成確認

 前項までで、EDMの準備は完了しているので、ここではEntityデザイナについて解説する。

 前述したように、Entityデザイナは、GUIベースでEDMを編集するためのデザイナだ。本稿では、構成の確認しか行わないが、Entityデザイナを使用することで、次のようなことが行える。

  • エンティティ、アソシエーション(リレーション)、マッピング、モデルの更新
  • 継承関係の表示

 また、Entityデザイナ上で右クリックし、メニューから[検証]を選択することで、EDM内のXMLに誤りがないかを検証することも可能だ。例えば、データベース側でフィールド・レイアウトが変更された場合やリレーションシップに変更があった場合など、EDMに矛盾が生じていないかを確認するには、この機能を利用すると便利だろう。もしエラーが発生した場合は、[エラー一覧]に表示される。

[参考]アソシエーションとは?

 アソシエーションとは、Entityデザイナ上で表現されるリレーションシップのことで、1対1、1対多、多対多などの関係を表す。特に多対多の表現は、RDB側の都合で従来は中間テーブルとして表していたが、中間テーブルそのものは本来、オブジェクト・モデルとしては不要なものである(つまり、インピーダンス・ミスマッチの一種といえる)。

 この中間テーブルの部分をEntityデザイナではアソシエーション(エンティティ同士の関係を表す線)として表現している。アソシエーションを利用することで、Entity Frameworkでは多対多の表現にも対応できる。

 Entityデザイナには、以下の2種類のウィンドウが存在する。

(1)[マッピングの詳細]ウィンドウ

 [マッピングの詳細]ウィンドウは、CSDLに定義されているエンティティ型*1のプロパティ情報とSSDLに定義されているデータベースのフィールドとのマッピング情報を表示/編集するためのウィンドウである。[マッピングの詳細]ウィンドウを使って、1つのエンティティ型に対して、複数の論理テーブルへのマッピングも可能だ。

*1 エンティティを、実体を持つオブジェクトと考えるならば、エンティティ型はその金型 ―― つまり、クラスのようなものであると考えればよいだろう。

 [マッピングの詳細]ウィンドウは以下の図のようになっている。


図10 [マッピングの詳細]ウィンドウ
  titlesエンティティ型のマッピングの詳細をツリービュー形式で表示。
  左側がすべてストア・スキーマ(テーブル)の列名となる。
  右側がマッピングされる概念スキーマ(エンティティ型)のプロパティ名となる。
  新たなエンティティ型の追加を行う場合は、ドロップダウンリストからエンティティ型を選択する。

 1つのエンティティ型に対して、複数の論理テーブルへのマッピングを行いたい場合は、 にあるドロップダウンリストからエンティティ型を追加し、ストア・スキーマの列とマッピングする概念スキーマの列を新規作成し、マッピングすればよい。

(2)[モデル ブラウザ]ウィンドウ

 概念スキーマ、ストア・スキーマをツリー表示するのが[モデル ブラウザ]ウィンドウだ。ツリービューの上部分ではノードとして概念スキーマが表示され、その子ノードに「エンティティ型」「アソシエーション」が展開される。その下には、ノードとしてストア・スキーマが表示され、子ノードに「テーブル/ビュー」「ストアドプロシージャ」「制約」が展開される。

 モデル・ブラウザで項目を選択すると、その項目が[プロパティ]ウィンドウ、[マッピングの詳細]ウィンドウでアクティブ表示される。そこから各ウィンドウでエンティティ型の編集/更新作業を行うことができる。


図11 [モデル ブラウザ]ウィンドウ

EDMに対するクエリの利用方法

 EDMに対してクエリを発行するには、3種類の方法がある。1つがEntity Clientに直接クエリを発行する方法で、残りの2つがObject Services経由でクエリを実行する方法である。

 これら3種類の方法の特徴をまとめると、以下の表のようになる。まずはどのような方法があり、どのような用途に向いているのかを押さえていただきたい。

Entity SQL

Entity Client
Query Builderメソッド
(Object SQL)

Object Services
LINQ to Entities

Object Services
アドホック・クエリ向き*
×
型指定がされている
×
×
EDMの型を戻り値にできる
×
INSERT/UPDATE/DELETE句の利用
×
×
×
表1 EDMに対するクエリの特徴
* アドホック・クエリとは、ユーザーが入力した値によって、実行中に動的に生成されるクエリのこと。

 EDMに対する3種類のクエリには、それぞれ長所と短所がある。それぞれの特徴を理解し、業務に合ったものを選択することで開発生産性が向上できる。

 ただし、厳密な型指定が行われるLINQでは、コンパイル時の構文チェック、スキーマ・チェックが可能になるほか、IntelliSenseなども活用できる。このため、アドホック・クエリが必要な場合以外では、LINQ to Entities + Object Servicesを選択することをお勧めする。

 では大まかな特徴を押さえたところで、クエリを発行するそれぞれの方法について解説する。


 INDEX
  Visual Studio 2008 SP1新機能解説(1)
  DBアプリをコーディングレスで構築する「ASP.NET Dynamic Data」
    1.Dynamic Dataアプリケーションの基本
    2.データ・モデルの作成/Global.asaxの編集
    3.メタデータ編集によるDynamic Dataアプリケーションのカスタマイズ
    4.自作ユーザー・コントロールの利用/ページ・テンプレートのカスタマイズ
 
  Visual Studio 2008 SP1新機能解説(2)
  .NETの新データアクセス・テクノロジ「ADO.NET Entity Framework」
    1.ADO.NET Entity Framework概要
  2.Entity Data Model(EDM)の作成と利用
    3.EDMに対するクエリの利用方法(Entity SQL)
    4.EDMに対するクエリの利用方法(Object Services/LINQ to Entities)
 
  Visual Studio 2008 SP1新機能解説(3)
  RESTスタイルのWebサービスを手軽に公開する「ADO.NET Data Services」
    1.ADO.NET Data Services概要/対応するクライアント
    2.サンプル − ADO.NET Data Servicesの公開
    3.ASP.NET AJAX環境のデータを取得/追加する


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

本日 月間