全て、
Nhibernate では、次のように記述された多くのコードを見ました。
using(ISession sess = factory.OpenSession()) {
using(ITransaction trans = sess.BeginTransaction()) {
// query, or save
trans.Commit();
}}
クエリや単一のエンティティの更新のためにトランザクションを開始することは、なぜ私をいつも困惑させましたか? 次に、読んだ後、このパターンに従うと2つの利点が得られることを知りました。
- 自動接続解除
- 自動フラッシュ
けっこうだ。私の質問は、Castle ActiveRecord と接続プーリングに関するものです。
私は ASP.NET アプリで Active Record を使用しています。一般的なパターンは、リクエスト全体に対してセッションを作成することです。
私の質問は次のとおりです。
1.効率的な接続プーリングを実現するために、SessionScopeまたはTransactionScopeを使用する必要があります(および開始/終了トランザクションを使用して接続を取得/解放します)。データベース接続 (ADO.net 接続オブジェクト) を保持したいのは、永続化ロジックの間のみであり、要求の存続期間全体ではありません (上記の nhibernate トランザクションによって実装される接続セマンティクスを使用します)。
2. SessionScope は、範囲外になったときにフラッシュしますか (つまり、その Dispose メソッド内で)?
LK (回答済み): はい、スコープが読み取り専用でない限り。
3. TransactionScope は、範囲外になった場合 (つまり、Dispose メソッド内) にロールバックしますか?
LK (回答済み): onDispose アクションに依存しますが、デフォルトではコミットします。
4. キャッスル アクティブ レコードの公式ドキュメントはどこにありますか。nhibernate や本のような公式の PDF ドキュメントはありますか?