SubSonicSectionの設定

(3)の部分では、SubSonicの動作をプロバイダと呼ばれる単位で記述しています。

セクション(SubSonicSection)に設定できる属性

属性名 説明 既定値
defaultProvider 既定で使用するプロバイダ名 なし
enableTrace トレースメッセージを出力するか(trace.axd) false
templateDirectory 生成するコードのテンプレートの場所 なし

このセクションでは、defaultProvider名が、定義しているプロバイダ名と同じになっていれば問題ないでしょう。

プロバイダの設定

各プロバイダには、SubSonicの挙動を設定します。前ページの設定例では、DB接続先(connectionStringName属性)に「ConSs」を、生成するクラスの名前空間名(generatedNamespace属性)に「Ss」を設定しました。なお、SsはSubSonicの略です。プロジェクトに応じて任意の名前を設定してください。 このプロバイダの設定では、下表のような項目を設定できます。たくさんありますので、まずはname、type、connectionStringName、generatedNamespaceといった基本属性だけを設定すれば良いでしょう。

SubSonicプロバイダに設定できる主要な属性

属性名 説明 既定値
type プロバイダクラスの指定。SQL Serverの場合は「SubSonic.SqlDataProvider」 なし
connectionStringName 接続文字列の定義名 なし
generatedNamespace 生成するクラスの名前空間 なし
additionalNamespaces インポートする名前空間名。カンマ区切りで複数指定 なし
appendWith 列名が予約語(ifやevent等)と衝突した場合に付加する文字列 X
excludeProcedureList コード生成しないストアドプロシージャの名前(一部)。カンマ区切りで複数指定 なし
excludeTableList コード生成しないテーブルの名前(一部)。カンマ区切りで複数指定 なし
extractClassNameFromSPName ストアドプロシージャ名の最初がアンダースコアで囲まれていればクラス名として抽出。例:_SPs2_XXX false
fixDatabaseObjectCasing クラス名とメンバ名で先頭と区切り文字を大文字にする true
fixPluralClassNames テーブル名が複数形(~sやpeople)などの場合にクラス名を単数形に修正 true
generateLazyLoads 遅延ロードのコード生成(リレーションテーブルデータのキャッシュ) false
generateNullableProperties Nullを許容する列を、Nullable型にする true
generateODSControllers ObjectDataSourceコントロール用のクラスを生成 true
generateRelatedTablesAsProperties リレーションテーブルをメソッドではなくプロパティで生成 false
includeProcedureList コード生成するストアドプロシージャの名前一覧。カンマ区切りで複数指定 なし(全て)
includeTableList コード生成するテーブルの名前一覧。カンマ区切りで複数指定 なし(全て)
manyToManySuffix 多対多の関連テーブルを表す接尾語 _Map
regexDictionaryReplace 正規表現置換辞書。置換前と置換後の文字列をカンマ区切りのペアで登録。各ペアをセミコロン区切りで複数登録可(既定値:なし) なし
regexIgnoreCase 正規表現検索時に大文字小文字を区別しない false
regexMatchExpression 正規表現の検索文字。regexReplaceExpressionとペアで使用 なし
regexReplaceExpression 正規表現の置換文字。regexMatchExpressionとペアで使用 なし
removeUnderscores DBオブジェクト名からクラス名に変換するときにアンダースコアを除外するか true
setPropertyDefaultsFromDatabase 保存時にDBのデフォルト値を設定するか false
spBaseClass ストアドプロシージャの基本クラスの名前 StoredProcedure
spClassName ストアドプロシージャメソッドが属するクラスの名前 SPs
stripColumnText 列名から取り除く文字列。カンマ区切りで複数指定 なし
stripParamText 引数から取り除く文字列。カンマ区切りで複数指定 なし
stripSPText ストアドプロシージャ名から取り除く文字列。カンマ区切りで複数指定 なし
stripTableText テーブル名から取り除く文字列。カンマ区切りで複数指定 なし
stripViewText ビュー名から取り除く文字列。カンマ区切りで複数指定 なし
tableBaseClass テーブルから生成されるクラスの基本クラス名 ActiveRecord
useUtc 時刻にUTC(世界標準時刻:universal time coordinated)を使う false
viewBaseClass ビューから生成されるクラスの基本クラス名 ReadOnlyRecord
viewStartsWith 生成対象とするビューの名前の接頭語 なし(全て)

なお、これらの属性は、大文字と小文字を区別するので、設定する際は注意してください。

ビルド時にコードを生成する設定(Web.config)

次にASP.NETのビルド時にコードを生成する設定を行います。まず、App_Codeフォルダに拡張子がabpというファイルを追加します。 App_Codeフォルダの右クリックメニューから[新しい項目の追加]をクリックします。[テキストファイル]を選択し、ファイル名を「SubSonic.abp」に変更します。このテキストファイルの中身はなんでもかまいませんが、ここでは*と入力しています。

App_Codeフォルダに拡張子がabpというファイルを追加したところ

加えて、Web.configのセクションに、の定義を追加します。

Web.configにビルド時のアクション(buildProvider)の設定を記述する

<code><pre>
<configuration>
    ~省略~
  <system.web>
    ~省略~
  <compilation debug="true">
  <!-- ビルド時にクラスを生成する設定 -->
  <buildProviders>
    <add extension=".abp" type="SubSonic.BuildProvider,SubSonic"/>
  </buildProviders>
</compilation>
~省略~
  </system.web>
</configuration>

この設定をすることによって、App_Codeフォルダに「.abp」で終わる拡張子のファイルがあれば、ビルド時にSubSonic.BuildProviderクラスが動作してコードが生成されます。

コードの生成

以上で設定は完了です。ここまでの設定ができたら、[ビルド]メニューから[Webサイトのビルド]をクリックしてください。SubSonicがデータベースのオブジェクトを読み取って、コードを生成してくれるはずです(このデータアクセス用コードは、ASP.NET用の一時フォルダ「<システムフォルダ>\Microsoft.NET\Framework\<バージョン>\Temporary ASP.NET Files\<サイト名>」に生成されます)。 生成する名前空間(generatedNamespace属性)として「Ss」と定義したので、コードエディタで、Ssと入力してみてください。設定がうまくいっていると、インテリセンスで、各テーブルにアクセスするコードが表示されるはずです。

インテリセンスで、SubSonicが生成したクラスが表示される

書籍テーブルにアクセスする「書籍クラス」「書籍Collectionクラス」「書籍Controllerクラス」が生成されていることが分かります。 もし、うまく生成されていない場合は、Web.configの設定を確認してください。また、テーブルに主キーが設定されているかも確認してください。コードを再生成するには、SubSonic.abpファイルのテキストを適当に変更してから保存します。そして再び[Webサイトのビルド]をクリックしてください。