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」に変更します。このテキストファイルの中身はなんでもかまいませんが、ここでは*と入力しています。
加えて、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サイトのビルド]をクリックしてください。