【ハウツー】
前回は、SubSonicによって生成されたコードを使って効率的にプログラミングする方法について紹介しましたが、今回は開発で役立つ情報をTIPS的に紹介します。
SubSonicでトランザクション制御を行う場合、自動トランザクションを使用します。手順としては、System.Transactionsに参照設定を追加してから、その中のSystem.Transactions.TransactionScopeクラスを利用します。コードとしては、次のようなイメージになります。
using (TransactionScope scope = new TransactionScope()){
try{
出版社 pub = new 出版社();
pub.Id = 50;
pub.名前 = "味覚出版社";
pub.Save(); //保存1
書籍 book = new 書籍();
book.Id = 100;
book.名前 = "おろし蕎麦入門";
book.価格 = 2000;
book.出版社ID = 50;
book.Save(); //保存2
scope.Complete(); //コミット(成功)
}catch (System.Data.SqlClient.SqlException ex){
System.Diagnostics.Debug.Write(ex.ToString());
} //ロールバック(失敗)
}
TransactionScopeクラスのCompleteメソッドを呼び出すと、トランザクションがコミットされます。もし、呼び出さないとトランザクションは中止されロールバックされます。このサンプルの場合、書籍データの保存時に主キー重複などのエラーが発生すると、出版社のデータも保存されずにロールバックされます。
生成されたクラスに機能を追加したい場合には、パーシャルクラスを作成すると良いでしょう。パーシャルクラスとは、クラスのコードを複数のファイルに分けて記述できる機能です。本稿のプロジェクトの場合、genフォルダにコードが生成されますので、genフォルダ以外の場所に、パーシャルクラス(書籍クラスや出版社クラス)を作成すると良いでしょう。
genフォルダのファイルは生成するたびに上書きされてしまいますが、パーシャルクラスのファイルは変更されないので、コードを保持することができます。この例ではValidateメソッドと表示用のプロパティを記述しています。
上のパーシャルクラスの例では、ActiveRecordクラスのValidateメソッドをオーバライドしています。このValidateメソッドはSaveメソッドの前にデータの妥当性チェックのために呼び出されるメソッドです。
そのため、テーブル固有のチェックがあれば、このValidateメソッドに記述すると良いでしょう。もしエラーがある場合は、戻り値にfalseを設定すればデータは保存されません。
同様に、BeforeInsert(データの追加前)/BeforeUpdate(データの更新前)/BeforeValidate(妥当性チェック前)/AfterCommit(保存後)/Loaded(ロード後)といったメソッドをオーバーライドして、任意の処理を追加することができます。
パーシャルクラスによる機能拡張ではなく、生成コードを変更したいというケースもあるかもしれません。このような場合には、生成コードのテンプレートを差し替えることができます。テンプレートは「C:\Program Files\SubSonic\SubSonic 2.1 Final\src\SubSonic\CodeGeneration\Templates」にあり、このファイルはSubsonic.dllに埋め込まれています。
このテンプレートをカスタマイズするには、上のフォルダをコピーして、ファイルの中身を書き替えます。そして、Web.config(App.config)のtemplateDirectoryパラメータでその場所を指定すれば、新しいテンプレートを元にコードを生成してくれます。
SubSonicで作ったコードの動作をチェックしたい場合、SQLの実行状況をトレースできるツールが役立ちます。SQL Serverの場合「SQL Server Profiler」を利用すると良いでしょう。
SubSonicではコードを自動生成しているため、気付かないうちにSQLを大量に発行していることもあります。このような場合にトレース可能なツールがあると問題の解決に役立ちます。
| トマトを食べれば痩せられる!? -京大ら、新発見の成分で肥満改善効果を実証 [21:00 2/10] |
| JAXA、液体シリコン中に残存する共有結合を観察 -大口径ウェハの実現に期待 [20:11 2/10] |
| NEDOなど、熱膨張が小さな樹脂複合材料ペレットの量産化に成功 [19:22 2/10] |
| 理研、一般顕微鏡を蛍光顕微鏡に強化できるアダプタを試作して性能を実証 [19:15 2/10] |
| 天の川のブラックホールが小惑星を飲み込んでいる - NASAが発表 [18:08 2/10] |
|
シリーズ最終作『ゼロの使い魔F』のラストはどうなる!? [10:00 2/11] ホビー |
|
kizunaworld.org、LAのアーティスト・TOKiMONSTAによる楽曲を追加 [10:00 2/11] クリエイティブ |
|
萩尾望都がパリでマンガ教室、「11人いる!」の扉絵作り [09:45 2/11] ホビー |
|
[西部警察]大門のサングラスは照れ隠し? 制作担当者が語る舞台裏 [09:00 2/11] エンタメ |
|
9ストーリーズ ~バレンタインのエピソード~ [08:05 2/11] キャリア |