ScottGu's blog translated by Chica @ Wankuma

新しいASP.NET Dynamic Dataサポート

  

この週末に出荷したASP.NET 3.5 Extensions CTP には多くのすぐれた新機能が含まれています。

新機能の中の1つは"ASP.NET Dynamic Dataサポート"と呼ばれているものです。簡単に言うと、 これにより非常に素早く、LINQ to SQL (と今後はLINQ to Entitiesも)に対して動作するデータ駆動型のWebサイトが構築できるようになります。場合によってはページを手動で構築することなくこれを行うこともできます。

この方法をご確認いただく最善の方法ですが、 David Ebboがよくできた17 分のスクリーンキャストを提供されているので、ご覧頂ければと思います。:

また以下のステップを実行して頂ければ簡単にDynamic Dataサポートをお試し頂けます。 :

ステップ 1: ASP.NET Dynamic Dataサイトの作成:

ASP.NET 3.5 Extensions CTP をインストールすると、VS 2008またはVisual Web Developer 2008 Expressを使って、ASP.NET Dynamic Dataサポートを可能にした新しいWebサイトやWebアプリケーションプロジェクトを作成することができます。:

これはデフォルトのテンプレートファイルが入った新しいWebサイトを作成します。その中にはルックアンドフィールをカスタマイズできるCSSスタイルシートも含まれてきます。:

ステップ 2: サイトにLINQ to SQL データモデルを追加

LINQ to SQL は.NET 3.5で出荷された.NET クラスを使用してリレーショナルデータベースのモデル化を可能にするO/RM (オブジェクトリレーショナルマッパー) です。それによりLINQを使用してデータベースを検索することができ、またそこからデータの更新、挿入、削除も行うことができます。LINQ to SQL は完全にトランザクション、ビュー、ストアドプロシージャをサポートしています。またデータモデルにデータ検証やビジネスロジックを簡単に統合する方法も提供しています。

ASP.NET Dynamic Dataサイトの開始に当たって一番簡単な方法は新しいLINQ to SQL データモデルをプロジェクトに追加することです。(右クリックして、追加 > 新しい項目... -> LINQ to SQL クラス)これによりLINQ to SQL クラスデザイナが立ち上がります。データベーステーブルをサーバーエクスプローラからドラッグしてデータベーススキーマのクラス(およびリレーションシップ)一式を定義します。 :

ステップ 3: プロジェクトで動的テンプレートを有効化:

ASP.NET Dynamic Dataプロジェクトには、デフォルトでLINQ to SQL およびLINQ to Entitiesのデータモデルの"Scaffold(Webアプリケーションのひな形となるアプリケーションを作り上げる機能)"ビューを自動的に作成するサポートがビルドインされています。Dynamic Dataプロジェクトには、テンプレートページとユーザコントロールが含まれており、それによりデータの検索、編集、選択、削除のUIが自動的に作成されます。これは、プロジェクトに追加されたLINQ to SQL またはLINQ to Entitiesデータモデルに基づいて実行時に動的に構築されます。

この自動Scaffoldサポートを有効化するには、プロジェクトのweb.configファイルを開いて、"dynamicData"セクションにある"enableTemplates"属性を"true"に設定してください。:

注: この自動Scaffold機能は現在セキュリティの関係上デフォルトでは設定がオフになっています。(そのため、明示的にオンにする必要があります。)

注: 上記でご覧の通り、ASP.NET dynamicData セクションではオプションでURLマッピングサポートが提供されており、動的Scaffoldページに対するURLを必要なURLフォーマットにカスタマイズすることができます。

ステップ 4: サイトの起動

F5を押してプロジェクトを起動してください。デフォルトで、default.aspxページにデータモデルにある全てのテーブルオブジェクトが一覧表示されます。 :

注: default.aspxはプロジェクトのホームページになります。もし見た目を変更したい場合はファイルを開いて編集してください。

上記のリストにあるテーブル名をクリックすると、その中のデータを一覧表示する動的なデータページが表示されます。 :

デフォルトのデータビューページでは、(ASP.NET AJAXが有効化された)データのページングや編集がビルドイン・サポートされているデータ操作UIを自動的に作成します。:

データビューページは自動的にオブジェクト同士のリレーションシップを推測し、自動フィルタリングサポートを提供します。 :

データビューページは、自動的にオブジェクト間のリレーションシップを表示し、ユーザが簡単にそれらを操作できるようにします。例えば、製品のカテゴリの列を見て頂くと、ある特定の製品に対するカテゴリの詳細へどのように導くことができるかをご確認頂けると思います。 :

また、データビューページでは、自動での選択、編集、削除サポートを有効化することができます。以下をご覧頂ければ、インライン編集モード時に、どのように自動的にフレンドリ外部キー名("Category"の編集と、"CategoryID"のInteger値を特定する代わりに行うドロップダウンリストからの名前選択を可能にします。)を推測しているかご確認頂けると思います。 :

これはすべてカスタムの.aspxページを1ページも書くことなく、カスタムコードを1つも書くことなく動作します。Web UIは全てLINQ to SQL またはLINQ to Entitiesのデータモデルから動的に作成されます。

ステップ 5: サイトを更にカスタマイズ

ORMのデータモデルに対して簡単に上記の機能が動作するという事は、サイトをすぐに立ち上げたい場合に便利になります。基本サイトの動作が確認できれば、さらにそこから進んでそれを(データ検証およびビジネスロジックレベル、またUIレイヤーにおいて)カスタマイズすることも可能です。

標準のLINQ to SQL データモデルやビジネス検証ルールをデータモデルに追加して制約を強化することができます。Dynamic Dataページは自動的にこのロジックから動作し、それらに基づいて適切なエラーメッセージや検証UIを提供します。

またさらにすすんで必要なデータページのUIをカスタマイズすることもできます。Dynamic Dataプロジェクトでは、サイトにある全てのデータページや列の型のデフォルトで用意されたルックアンドフィールをカスタマイズすることができます。新しいDynamic Dataプロジェクトを作成した時に"/App_Shared"の下に追加されたデフォルトのテンプレートファイルを通じてそれら両方をカスタマイズすることができます。 :

デフォルトのデータページビュー、またはデフォルトデータ列の表示をカスタマイズする場合は上記のファイルを単純に編集してください。

その後、プロジェクトにマップされた.aspxページを明示的に追加することで、特定のデータビューページのUIをオーバーライドすることもできます。たとえば、\Products\ListDetails.aspxページをプロジェクトに追加することで製品に対するデフォルトのListDetails動作をオーバーライドすることができます。 :

そうすると、ページに標準のASP.NETデータコントロールを追加することができます。また、ASP.NET 3.5 Extensions CTPで出荷される新しい動的データ感知ASP.NETデータコントロールをページに追加することもできます。これらにより、(デフォルト動作に対するデータモデルクラスに関する関係とメタデータの推測を行う)新しい動的メタデータプロバイダを使用していても、完全にUIのルックアンドフィールをカスタマイズすることができます。

詳細について

上記では、ASP.NETのDynamic Dataプロジェクトで可能なシナリオや機能の触りの部分だけをご紹介しています。 詳細は:

  1. Davidのウェブキャストをご覧ください。
  2. ASP.NET Dynamic Dataクイックスタートをご覧ください。
  3. David EbboScott HunterMarcin Dobosz のブログをご購読ください。
  4. お困りの場合は、ASP.NET Dynamic Dataフォーラムでご質問ください。

LINQ to SQL やデータモデルクラスの作成方法についての詳細は、以下にある以前のブログ投稿をご参照ください。 :

www.asp.net サイトで、LINQ や LINQ to SQL "How do I?" のビデオもご覧頂けます。

Hope this helps,

Scott

ScottGu's blog translated by Chica @ Wankuma 

※本翻訳に関しまして、Scottさんにはご了承頂いております。