Page4EDMの作成と利用ここからは、実際にEDMを作成する手順と、EDMに対してクエリを発行する3種類の方法を確認していくことにしよう。FrameworkはWindowsアプリケーションをはじめとした.NETアプリケーションで利用することが可能である。Frameworkを経由して取り出した結果を、ASP.NETのGridViewコントロールで表示する。それでは具体的な手順を見ていくことにしよう。本サンプル・プログラムを動作させるに当たっては、無償で提供されているPubsデータベースを利用可能な状態にしておく必要がある。Modelを追加するまずはEDMを作成していく。2008を起動しWebサイトを作成した後に、ソリューション・エクスプローラ上で右クリックしてメニューより[新しい項目の追加]を選択し[新しい項目の追加]ダイアログを表示する。Model」を選択し、名前を「Pubs.edmx」と設定したうえで[追加]ボタンをクリックする。EDMのファイル名は自由に決められるが、拡張子は「.edmx」とする必要がある。Model」を選択し、名前を「Pubs.edmx」に設定する。Modelウィザードが起動する。「モデルに含めるコンテンツ」の設定では[データベースから生成]を選択して[次へ]ボタンを押す。Modelウィザード(1)次にデータ接続の選択を行う。今回はpubsデータベースの接続設定を行い[次へ]ボタンを押す。ここでは、データセットの作成時などと同様に、接続文字列をWeb.Configに保存することが可能だ(Windowsフォームの場合はApp.Config)。このサンプルでは既定のまま保存しておこう。ウィザード(2)最後にデータベース・オブジェクトの選択を行う。今回は「publishers」と「titles」のテーブルを選択し、[完了]ボタンを押す。これによりEDMが生成される。この際、内部的には、.NETのクラスが生成されるほか、前述したMSL/CSDL/SSDLのXML定義も生成される。Modelウィザード(3)以上の手順をすべて行うと、以下のようなEntityデザイナの画面が表示される。正しくEDMが作成されていることを確認した後、保存する。これでEDMの準備は完了だ。[2]新規のWebフォームを作成する続いて、EDMを使用する新規のWebフォーム(EntitySQL.aspx)を作成しておこう。今回は、コードビハインド側でデータアクセス・ロジックを記述し、GridViewコントロールにバインドを行うので、フォーム・デザイナではGridViewコントロールを配置するだけだ。前項までで、EDMの準備は完了しているので、ここではEntityデザイナについて解説する。前述したように、Entityデザイナは、GUIベースでEDMを編集するためのデザイナだ。本稿では、構成の確認しか行わないが、Entityデザイナを使用することで、次のようなことが行える。継承関係の表示また、Entityデザイナ上で右クリックし、メニューから[検証]を選択することで、EDM内のXMLに誤りがないかを検証することも可能だ。データベース側でフィールド・レイアウトが変更された場合やリレーションシップに変更があった場合など、EDMに矛盾が生じていないかを確認するには、この機能を利用すると便利だろう。エラーが発生した場合は、[エラー一覧]に表示される。[参考]アソシエーションとは?アソシエーションとは、Entityデザイナ上で表現されるリレーションシップのことで、1対1、1対多、多対多などの関係を表す。多対多の表現は、RDB側の都合で従来は中間テーブルとして表していたが、中間テーブルそのものは本来、オブジェクト・モデルとしては不要なものである(つまり、インピーダンス・ミスマッチの一種といえる)。この中間テーブルの部分をEntityデザイナではアソシエーション(エンティティ同士の関係を表す線)として表現している。Frameworkでは多対多の表現にも対応できる。Entityデザイナには、以下の2種類のウィンドウが存在する。(1)[マッピングの詳細]ウィンドウ[マッピングの詳細]ウィンドウは、CSDLに定義されているエンティティ型*1のプロパティ情報とSSDLに定義されているデータベースのフィールドとのマッピング情報を表示/編集するためのウィンドウである。[マッピングの詳細]ウィンドウを使って、1つのエンティティ型に対して、複数の論理テーブルへのマッピングも可能だ。クラスのようなものであると考えればよいだろう。[マッピングの詳細]ウィンドウは以下の図のようになっている。[マッピングの詳細]ウィンドウtitlesエンティティ型のマッピングの詳細をツリービュー形式で表示。左側がすべてストア・スキーマ(テーブル)の列名となる。右側がマッピングされる概念スキーマ(エンティティ型)のプロパティ名となる。新たなエンティティ型の追加を行う場合は、ドロップダウンリストからエンティティ型を選択する。あるドロップダウンリストからエンティティ型を追加し、ストア・スキーマの列とマッピングする概念スキーマの列を新規作成し、マッピングすればよい。ブラウザ]ウィンドウだ。ツリービューの上部分ではノードとして概念スキーマが表示され、その子ノードに「エンティティ型」「アソシエーション」が展開される。その下には、ノードとしてストア・スキーマが表示され、子ノードに「テーブル/ビュー」「ストアドプロシージャ」「制約」が展開される。モデル・ブラウザで項目を選択すると、その項目が[プロパティ]ウィンドウ、[マッピングの詳細]ウィンドウでアクティブ表示される。そこから各ウィンドウでエンティティ型の編集/更新作業を行うことができる。ブラウザ]ウィンドウEDMに対するクエリの利用方法EDMに対してクエリを発行するには、3種類の方法がある。Services経由でクエリを実行する方法である。これら3種類の方法の特徴をまとめると、以下の表のようになる。どのような方法があり、どのような用途に向いているのかを押さえていただきたい。アドホック・クエリとは、ユーザーが入力した値によって、実行中に動的に生成されるクエリのこと。EDMに対する3種類のクエリには、それぞれ長所と短所がある。それぞれの特徴を理解し、業務に合ったものを選択することで開発生産性が向上できる。厳密な型指定が行われるLINQでは、コンパイル時の構文チェック、スキーマ・チェックが可能になるほか、IntelliSenseなども活用できる。Servicesを選択することをお勧めする。大まかな特徴を押さえたところで、クエリを発行するそれぞれの方法について解説する。7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。TranslatorはPowerPoint用のアドイン。