前回は、ASP.NETアプリケーションから簡単にデータベースを操作できるオープンソース「SubSonic」の設定方法について紹介しました。本編では、SubSonicによって生成されたコードを使って効率的にプログラミングする方法について紹介していきます。

サンプルで使用するテーブルのレイアウト

本稿では、以下のテーブルを利用してプログラムを紹介していきます。

サンプルのテーブルレイアウト

このデータベースには、本の情報を格納する「書籍」テーブルと、その書籍を出版している「出版社」テーブルがあります。このテーブル間には、リレーション設定を行っています。

生成されたクラスの概要

SubSonicを使って、このテーブルのコードを出力すると次のクラスが生成されます。

生成されたコードのクラス図

クラス名はテーブルと同じ名前で生成されます(ただし、テーブル名が「USERS」や「ORDERS」のように複数形の場合、生成されるクラス名は「User」や「Order」というように単数形の名前になります。

これらのクラスはActiveRecordクラスを継承します。この基本クラスの機能によって、データの操作が簡単に行えます。テーブルでなくビューの場合は、ReadOnlyRecordクラスを継承します。そのため、読み取り専用のクラスとなります。

クラスのプロパティ名は、テーブルのカラム名と同じ名前で定義されます。例えば、「名前カラム(nvarchar)→名前プロパティ(string型)」「価格カラム(int)→価格プロパティ(Nullableのint型)」のように定義されます。 また、このActiveRecordを継承するクラス以外にも2つのクラス(書籍Collection、書籍Controller)が生成されますが、これらについては後ほど紹介します。

データの追加(INSERT文)

それでは、この生成されたクラスを使ってコードを書いていきましょう。なお、以降のコードでは、Ss名前空間(環境構築時に指定した名前空間)とSubSonic名前空間をインポートしているとします。 まず、データの追加から見ていきましょう。

データの追加方法

//書籍オブジェクトのインスタンス化 書籍 book = new 書籍(); //各列の既定値(デフォルト)を使用する場合のインスタンス化 //書籍 book = new 書籍(true); //列の値を設定する book.Id = 100; book.名前 = "ActiveRecord入門"; book.価格 = 3000; book.発売日 = DateTime.Parse("2008/09/01"); book.出版社ID = 1; //保存する book.Save(); //登録者名または登録者IDをCreatedBy列に設定する場合 //book.Save("aoki");

データを追加したい場合は、まず対象クラスのインスタンスを作成します。プロパティに値を設定した後で、Saveメソッドを呼び出すとINSERT文が実行されます。 Saveメソッドの引数には登録者IDまたは登録者名を設定することもできます。もし、保存対象テーブルに「CreatedBy」という名前のカラムがあれば、この引数の値がセットされます。 もし、キー列(IDカラム)が自動採番(SQL ServerのIDENTITY)の場合は、キー列に値をセットする必要はありません。