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コントロールを張り付けて、タスクメニューから[データソースの構成]をクリックします。すると次のような画面が表示されます。
ここでビジネスオブジェクトとして表示されているのが、SubSonicが生成したコントローラクラスです。利用したいコントローラ(ここでは書籍Controller)を選択すると、データバインド系コントロール(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の特徴の一つですので、ぜひ活用してみてください。