はじめに
ASP.NETのWebアプリケーションにデータベースの編集機能を実装した経験がある方は多いと思います。作業自体は特に難しいわけではありませんが、時間がかかって面倒ですし、同じことの繰り返しもたびたび発生します。手順も地道です。データベースのテーブルを解析し、テーブルの各フィールドに適した編集コントロールを作成し、データベースを更新するロジックを記述して、やっと一段落です。この作業を、対応すべきテーブルすべてに対して繰り返していかなくてはなりません。
もっと時間を節約できる方法はないものかと考えている方に、ぴったりの機能があります。それは、.NET Framework 3.5 SP1(Service Pack 1)で新たに搭載された「ASP.NET Dynamic Data」という機能です。この機能を使えば、データベース編集用のWebベースのインターフェースを短時間で作成できます。ASP.NET Dynamic Dataは作成、読み込み、更新、削除という基本的なデータベース操作をすべてサポートしており、目的のテーブルに対して基本的なCRUD(Create/Read/Update/Delete)操作を実行するWebインターフェースを簡単に作成できます。
図1は、ASP.NET Dynamic Dataで作成した編集ページの例です。データベースに対する4種類の基本操作に対応したページがプロジェクトテンプレートにあらかじめ用意されており、表示や編集の対象となるテーブルを指定すれば済みます。
この記事では、ASP.NET Dynamic DataによるWebアプリケーションの作成とカスタマイズについて、最初の手順からアプリケーションの完成まで順を追って紹介していきます。サンプルコードはC#です。データソースには、SQL ServerのサンプルデータベースとしておなじみのNorthwindを使用します。
Dynamic Dataの第1歩
ではさっそくASP.NET Dynamic Dataアプリケーションを作ってみましょう。最初は簡単に開発できるアプリケーションから入りますが、それでも十分使い物になる出来栄えです。まずは、Visual Studio 2008 Service Pack 1と.NET Framework 3.5 Service Pack 1をインストールしましょう。両方をインストールすると、Visual Studioの[新しいプロジェクト]ダイアログボックスに、ASP.NET Dynamic Data関連のテンプレートが2つ表示され、選択可能となります(図2を参照)。
ASP.NET Dynamic Dataはデータベース用のユーザーインターフェースを作成するための機能なので、データベースへのアクセス方法も複数あります。具体的には、LINQ to SQLと、ADO.NET Entity Framework(ADO.NET Entitiesと略記)という2つに対応しています。技術的には、1つのASP.NET Dynamic Dataプロジェクトの中で両方のデータアクセス方法を混在して使うことも可能ですが、通常はどちらか一方に決めて、そちらで統一します。
つまり、ASP.NET Dynamic Dataアプリケーションの開発に取りかかるときには、データアクセス方法を早い段階で決めなくてはならないのが普通です。プロジェクトを開始する前に、データベースへのアクセス方法を検討しておくのがよいでしょう。
この記事では、データベースアクセスのさまざまなニーズにエレガントに対応できるADO.NET Entity Frameworkを使用します。従って、[新しいプロジェクト]ダイアログ ボックスでは、[ASP.NET Dynamic DataエンティティWebアプリケーション]というテンプレートアイコンを選択します。プロジェクトの名前を指定して[OK]をクリックすると、スケルトンアプリケーションを配置した新規ソリューションが作成されます。
他の種類のアプリケーションの場合は、作成したプロジェクトをそのまま実行してもきちんと動作することが多いのですが、ASP.NET Dynamic Dataアプリケーションの場合は、そうはいきません。何も変更を加えずにアプリケーションをそのまま実行しようとすると、アクセス可能なテーブルがないというエラーが表示されます。でも心配はご無用です。この問題は簡単に修正できます。
この原因は簡単で、アプリケーションが使用するデータベースを指定していないことにあります。データベース接続がなければ、アプリケーションがデータを表示できないのは当然です(エラーメッセージがもっと分かりやすければいいのに、とも言えますが)。つまり、問題を解決するには、データベース接続を定義すればいいということになります。
先ほど選んだプロジェクトテンプレートはADO.NET Entities用ですので、その種類の接続をプロジェクトに追加する必要があります。それには、Visual Studioのソリューションエクスプローラでメインのプロジェクトノードを右クリックし、コンテキストメニューで[新しい項目の追加]を選択します。すると[新しい項目の追加]ダイアログボックスが表示されます。このダイアログボックスから[ADO.NET エンティティ データ モデル]オブジェクトを選択し(左側の[データ]セクションから見つけるのが簡単)、オブジェクトの名前を指定します。オブジェクトにはデータベースにちなんだ名前を付けるのがよいでしょう。例えば、SQL ServerのサンプルデータベースNorthwindを使用する場合なら「NorthwindModel」とする、などです。
[OK]をクリックするとEntity Data Modelウィザードが表示されます(図3を参照)。まずは、データベースからモデルを作成するか、空のモデルを作成するかの選択です。ASP.NET Dynamic DataアプリケーションにはSQLデータベースがいずれにせよ必要になるので、通常は既存のデータベースを基にしてモデルを生成する方が手軽です。ウィザードの次の手順では、データベースの接続文字列を指定します。これはもちろんデータベースに応じて変わりますが、最低でも、サーバの名前(ホスト名)、データベース名、およびユーザーIDとパスワードが必要です。
必要事項をすべて指定したら、ウィザードを先へ進めます。ここでは、モデルに含めるテーブル、ビュー、ストアドプロシージャをすべて指定します。基になるテーブルを直接操作するのが最も簡単ですが、必ずしも最適な方法とは言えません。例えば、ビューを使用しておけば、後でテーブルの構造を変えた場合でもアプリケーションに影響がおよびません。これらのデータベースオブジェクト(以後、この記事では、ビューやストアドプロシージャも含めて簡潔に「テーブル」と表すことにします)を選択すれば準備は完了です。[完了]をクリックするとエンティティモデルが作成されます。結果は図4のようになります。プロジェクトには、モデルをXMLで記述した.edmxファイルが新たに追加されています。