新コントロールの追加(LinqDataSource/ListView/DataPager)
VS 2008では新たにLinqDataSource/ListView/DataPagerの3つのコントロールが追加されました(AJAX Extensions除く)。本項ではこれらのコントロールの簡単な使い方について解説します。
<asp:LinqDataSource>コントロール
LinqDataSourceコントロールはSqlDataSource、ObjectDataSourceなどと同様のデータソースコントロールです。LinqDataSourceコントロールの特徴と利点は名前の通り、LINQ(詳細は後述)を利用してデータソースをASP.NETサーバーコントロールにバインドすることができる点です。しかし、このLinqDataSourseコントロールにはいくつかの制限もあります。現時点で判明している制限は以下の2点です。
- 取得したデータの編集・削除・更新を行う場合には、全列選択(*)を選択する必要がある(SELECT句の指定ができない)
- Where句、OrderBy句しか実装できない(Join句は利用できない)
以上の理由からLinqDataSourceコントロールは、制限付きのLINQが使えるデータソースコントロールと言えます。筆者が触れてみた感想として、このコントロールは参照系のページで利用するのが好ましいと感じました。とはいっても、制限がある中でうまく活用する方法もあると思うので、どのように使うかは各自が工夫して利用していただければと思います。
今回はGridViewコントロールを使って、参照から更新までのサンプルをダイアログ設定のみ(コーディングレス)で作成します(サンプルソースの「LinqDataSourceSample.aspx」)。ただし、このサンプルを理解するには、まずLINQ to SQLを理解する必要があります。LINQは後述しますが、先にLINQ to SQLについて解説します。
LINQ to SQLクラス
LINQ to SQLクラスとは.NET Framework 3.5から利用することができるO/Rマッピングの実装クラスです。ソリューション エクスプローラから[新しい項目の追加]で追加できます(図12)。
LINQ to SQLクラスは、トランザクション、ビュー、ストアドプロシージャのすべてをサポートします。また、データモデルにデータ検証とビジネスロジックのルールを統合する簡単な方法も提供します。
LINQ to SQLデザイナとDataContextオブジェクトの生成
VS 2008ではLINQ to SQLデザイナが提供されており、LINQ to SQLオブジェクトモデルとしてデータベースをモデル化、視覚化することが可能です(図13)。
今回はサンプルデータベースとしてPubsを利用します。サンプルを実行する際には、記事内のテーブルを準備してください。
LINQ to SQLのデザイン画面では、サーバーエクスプローラから利用するテーブルをドラッグしてデザイン画面へとドロップします。これにより、Pubsデータベース内のテーブルにマッピングされたクラスが作成されます。また、複数のテーブルをドロップした際、配置されたクラス同士に関係(アソシエーション)があると、アソシエーションや継承の矢印が自動表示されます。これらはデータベースでプライマリキーや外部キーのリレーションシップを使用してモデル化されます。
利用するテーブルの配置後に保存すると、DataContextオブジェクトが生成されます。サンプルではtitlesテーブル、salesテーブルを配置後に保存します。
DataContextオブジェクトとは、エンティティとモデル化したデータベースの関係を表すオブジェクトです。このオブジェクトはデータベースからエンティティに対する問い合わせクエリを行ったり、変更を適用したりします。また、データベース内でモデル化した各テーブルを表すプロパティと、追加した各ストアドプロシージャを実行するためのメソッドを持ちます。
ASP.NETでLINQ to SQLを利用しようとする場合、2つのアプローチがあります。
- ページにLINQのクエリを記述
- LinqDataSourceコントロールを利用
この2つはDataContextオブジェクトを利用する段階までは同じですが、そこからクエリを行う部分は扱い方が変わります。汎用的に利用できるのが前者、データ参照をメインで扱うための後者というイメージで捉えてください(ページにLINQのクエリを記述する方法については後述します)。



