SubSonicは1つのテーブルに対して3つのクラスを生成します。ここでは「テーブル名+Collection」「テーブル名+Controller」という名前のクラスについて紹介します。また、ストアドプロシージャの利用方法についても紹介します。

コレクションの利用

「テーブル名+Collection」という名前のクラスは、複数件のデータを操作するためのコレクション(System.ComponentModel.BindingList<T>の派生クラス)です。このクラスを利用することで、特定条件下のデータの値をまとめて変更したり、コードでデータで絞り込んだりできます。

コレクションクラス(書籍Collection)を利用したプログラムの例

//(1)出版社ID=1の書籍データを全て1000円値上げ 書籍Collection books = new 書籍Collection(); books.LoadAndCloseReader(書籍.Query().WHERE(書籍.Columns.出版社ID, 1).ExecuteReader()); foreach (書籍 book in books) { book.価格 += 1000; } //全て保存 books.SaveAll(); //(2)プログラムでデータをフィルタしてページに表示 //全ての書籍データを格納するコレクション 書籍Collection all = new 書籍Collection(); all.Load(); //表示用の書籍データを格納するコレクション 書籍Collection view = new 書籍Collection(); //日曜日に発売された書籍でフィルタ foreach (書籍 book in all) { if (book.発売日.HasValue && book.発売日.Value.DayOfWeek == DayOfWeek.Sunday) { view.Add(book); } } GridView1.DataSource = view.ToDataTable(); GridView1.DataBind();

(1)の例では、出版社ID=1の書籍データを全て1000円値上げしています。LoadAndCloseReaderメソッドを利用すると、コレクションにセットするデータをまとめて読み込むことができます。コレクション内のデータを操作した後で、SaveAllメソッドを呼び出すと、これらの変更を全てDBに保存できます。

(2)の例では、日曜日に発売された書籍でフィルタしてページに表示しています。テーブルの全データを読み出すには、Loadメソッドが使えます。ToDataTableメソッドを呼び出せば、コレクションのデータをDataTable形式に変換することもできます。

コントローラの利用

SubSonicでは、ObjectDataSourceコントロールと連携できるコントローラクラスも生成できます。このクラスは「テーブル名+Controller」という名前で生成されます。 このクラスを利用すると、簡単な画面操作だけでページを作ることができます。 例えば、ページにObjectDataSourceコントロールを張り付けて、タスクメニューから[データソースの構成]をクリックします。すると次のような画面が表示されます。

ObjectDataSourceのビジネスオブジェクト選択画面

ここでビジネスオブジェクトとして表示されているのが、SubSonicが生成したコントローラクラスです。利用したいコントローラ(ここでは書籍Controller)を選択すると、データバインド系コントロール(GridView等)を使ってデータを表示/編集することができます。

ObjectDataSourceとGridViewを使ってページを設定

ObjectDataSourceはコーディングレスでページの作成ができるので、初心者には使いやすいといえます。その反面、高度な制御をしたい時には、自由が利かないこともあります。そのような理由でコントローラクラスを生成する必要がない場合は、Web.configの設定でgenerateODSControllers属性をfalseに設定しておくと良いでしょう。

ストアドプロシージャの利用

コードで組み立てるのが難しいクエリの場合は、無理せずストアドプロシージャを作成すると良いでしょう。例えば、次のようなストアドプロシージャをSQL Serverに作成したとします。

書籍と出版社情報を価格で絞り込んで取得するストアドプロシージャ(T-SQL)

CREATE PROCEDURE 書籍情報取得 ( @価格 int = null ) AS BEGIN SET NOCOUNT ON; SELECT B.名前 AS 書籍名 ,B.価格, P.名前 AS 出版社名 FROM 書籍 AS B LEFT OUTER JOIN 出版社 AS P ON B.出版社ID = P.ID WHERE B.価格 = @価格 END

SubSonicでコードを再生成してから、「SPs」と入力すると「書籍情報取得」というメソッド名がインテリセンスに表示されます。引数の情報もインテリセンスに表示されるので、プログラムから簡単に使用することができます。このストアドプロシージャの実行結果はDataSet形式で取得できます。

ストアドプロシージャの呼び出し

SubSonicのWebサイトでも、複数のテーブルをJOINしたりGROUP BYするような複雑なSQLの場合は、ビューかストアドプロシージャを使うことを推奨しています。ビューとストアドプロシージャとの連携機能もSubSonicの特徴の一つですので、ぜひ活用してみてください。