特集:Visual Studio 2008 SP1新機能解説(2).NETの新データアクセス・テクノロジ
WINGSプロジェクト ナオキ/山田 祥寛 |
|
|
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 [マッピングの詳細]ウィンドウ | ||||||||||||
|
1つのエンティティ型に対して、複数の論理テーブルへのマッピングを行いたい場合は、 にあるドロップダウンリストからエンティティ型を追加し、ストア・スキーマの列とマッピングする概念スキーマの列を新規作成し、マッピングすればよい。
(2)[モデル ブラウザ]ウィンドウ
概念スキーマ、ストア・スキーマをツリー表示するのが[モデル ブラウザ]ウィンドウだ。ツリービューの上部分ではノードとして概念スキーマが表示され、その子ノードに「エンティティ型」「アソシエーション」が展開される。その下には、ノードとしてストア・スキーマが表示され、子ノードに「テーブル/ビュー」「ストアドプロシージャ」「制約」が展開される。
モデル・ブラウザで項目を選択すると、その項目が[プロパティ]ウィンドウ、[マッピングの詳細]ウィンドウでアクティブ表示される。そこから各ウィンドウでエンティティ型の編集/更新作業を行うことができる。
図11 [モデル ブラウザ]ウィンドウ |
EDMに対するクエリの利用方法
EDMに対してクエリを発行するには、3種類の方法がある。1つがEntity Clientに直接クエリを発行する方法で、残りの2つがObject Services経由でクエリを実行する方法である。
これら3種類の方法の特徴をまとめると、以下の表のようになる。まずはどのような方法があり、どのような用途に向いているのかを押さえていただきたい。
| ||||||||||||||||||||
表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環境のデータを取得/追加する | ||
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|