SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

ASP.NET Dynamic Dataでデータベースのユーザーインターフェイス作成を簡単に

データベース編集用のWebベースのインターフェースを短時間で作成

モデルへの接続

 こうしてエンティティデータモデルを作成し、プロジェクトに追加したら、アプリケーションの他の部分にデータモデルを接続できます。ASP.NET Dynamic Dataアプリケーションにはメタモデルというものがあり、LINQまたはADO.NET Entity Frameworkのコンテキストで接続できます。

 メタモデルには、ASP.NET Dynamic Dataアプリケーションを使って編集するデータベースの情報のほか、表示するテーブルの情報や、列の整形方法に関する情報などが含まれています。

 メタモデルの初期化はGlobal.asaxのコードビハインドファイルで行われます。アプリケーション全体の設定を記述するにはうってつけの場所です。Global.asaxファイルのコード(およびそのコードビハインドファイルのGlobal.asax.cs)が実行されるのは、ASP.NETアプリケーションの読み込み時(つまり最初のページの送信の直前)です。

 デフォルトの実装を見てみると、メタモデルの登録方法に関する長いコメントがあります。コメントの最後の行(29行目あたり)が実際のコード行です。この行のコメントを解除し、編集を加えて、データソースをアプリケーションに接続または登録します。エンティティモデルの名前をNorthwindEntitiesとした場合、コードは次のようになります。

model.RegisterContext(typeof(NorthwindEntities),
  new ContextConfiguration() {
    ScaffoldAllTables = true
  });

 データモデルのインスタンスを指定する必要はありません。C#のtypeof演算子でクラスの型を指定するだけで事足ります。内部的には、リフレクションを使って必要なデータが実行時に収集されます。

 次に、スキャフォールディング(scaffolding)という概念について理解しましょう。ASP.NET Dynamic Dataでは、最終的に生成するアプリケーションでどのデータベーステーブルのどのフィールドを編集可能オブジェクトに対応付けるかを、スキャフォールディングという仕組みで指定します。デフォルトでは、アプリケーションにはどのテーブルも表示されませんが、テストのために、全テーブルの全フィールドを編集可能にすることも可能です。それには、前述のコードのように、ScaffoldAllTablesプロパティをtrueに設定します。

 これらの登録を行うと、アプリケーションを実行できるようになります。アプリケーションのデフォルトページには、データモデルに含まれるすべてのテーブルが表示され(図5を参照)、各テーブル名がリンクとなっています。リンクをクリックすると、そのテーブルのレコードを表示するページに移動します(図6を参照)。レコードの一覧ページには、新規レコードを作成するためのリンクや、各レコードの編集と削除を行うためのリンクがあります。デフォルトでは、これらの編集は別ページで行いますが、ASP.NET Dynamic Dataはデータグリッドによるインプレース編集にも対応しています。

図5:Dynamic Dataアプリケーションのデフォルト表示
図5:Dynamic Dataアプリケーションのデフォルト表示
図6:顧客レコードを表示するデフォルトの一覧ページ
図6:顧客レコードを表示するデフォルトの一覧ページ

 ASP.NET Dynamic Dataはインテリジェントな機能も備えています。モデル(およびその基になるデータベース)でテーブル間に参照整合性が設定されている場合、当該テーブルから関係するテーブルへのリンクが表示されます。今回のサンプルデータベースの場合、1人の顧客が複数の注文を行っているケースもあります。このため、Customersテーブルの一覧には、この顧客による注文へのリンクが自動で表示されます。注文ページも同様で、注文の詳細行へのリンクが自動で表示されます。

Dynamic Dataアプリケーションの構造

 生成されたWebアプリケーションと、標準装備の豊富な機能をしばらく試したら、ブラウザを閉じてVisual Studioに戻りましょう。次は、ASP.NET Dynamic Dataアプリケーションの構造について見ていくことにします。

 まずは、プロジェクトに含まれているDynamicDataという特別なフォルダです。これがこのフォルダのデフォルトの名前ですが、Global.asax.csファイルでメタモデルのクラスのDynamicDataFolderVirtualPathプロパティを設定すれば、別の名前にも変更できます。

 DynamicDataフォルダのサブフォルダには要注目です。重要なのは、ContentCustomPagesFieldTemplatesPageTemplatesという4つのサブフォルダです。Contentフォルダには、アプリケーションで使用するロゴなどの画像や共通リソースが入っています(実際のレイアウトにはSite.masterというマスターテンプレートが使用されます)。CustomPagesフォルダは最初は空ですが、個別のテーブル用にページを作成する場合のプレースホルダとなります。デフォルトのASP.NET Dynamic Dataアプリケーションでは、すべてのテーブルの一覧ページと編集ページが同じ外観と操作性を持ちます。ここで例えば、顧客レコードと注文レコードの挿入には別のページを用意したいとなった場合、そのレイアウトページをCustomPagesフォルダに保存することになります。

 残る2つのサブフォルダは、ASP.NET Dynamic Dataアプリケーションの動作で重要な役割を果たします。1つはFieldTemplatesフォルダです。このフォルダには十数個ほどのユーザーコントロールが入っており、それぞれ特定の型のデータベースフィールドの表示に使用されます。例えば、Boolean型のフィールドにはBoolean.ascxのコントロールが使用され、VARCHAR型のフィールドにはText.ascxのコントロールが使用される、といった形です。ASP.NET Dynamic Dataはモデルに基づいて各列の型を判別し、表示するコントロールを決定します。

 PageTemplatesフォルダには、標準で使用するページに対応する一連の.aspxファイルが入っています。基本的なデータベース操作に対応するファイルとしては、データを作成するInsert.aspx、データを表示するList.aspx、データを更新するEdit.aspxの3種類があります。4つ目の基本操作である削除に関しては、List.aspxが処理します。

 以上の知識をふまえてこれらのファイルを開いてみると、それぞれの構造をつかめます。前述のとおり、モデルで使用するすべてのテーブルは、同じ.aspxページ(および対応するコードビハインドファイル)を使って表示されます。従って、これらのページは、モデルに基づいて静的に生成されたものではなく、モデルに基づいて実行時に処理されます。このため、.aspxファイルのコードには、ページクラスで定義された変数であるtableというオブジェクトがたびたび出てきます。

 このオブジェクトは実際にはMetaTable型で、選択したテーブルに関するメタ情報を格納しています。オブジェクト自身の初期化はPage_Loadイベントハンドラで行います。.aspxファイルでは、table.DisplayNameやtable.GetActionPathといった形でメンバを参照しています。

次のページ
属性によるカスタマイズ

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Jani Jarvinen(Jani Jarvinen)

フィンランドのソフトウェア開発トレーナー兼コンサルタント。Microsoft C# MVPの受賞者で、投稿も多数。ソフトウェア開発に関する著書も3冊出版している。ITpro.fiというフィンランドのソフトウェア開発エキスパートグループのグループリーダー。ブログのアドレスはhttp://www.saunalahti.fi/janij/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4155 2009/07/29 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー