5

NHibernate を学ぼうとしているうちに、次のハードルに到達しました。それを StructureMap と統合するにはどうすればよいですか?

コード例は大歓迎ですが、一般的な手順にもっと興味があります。

やろうと思っていたのは…

  • Fluent NHibernate を使用して、NHibs 構成で使用するクラス マッピングを作成する
  • ISession と ISessionFactory を実装する
  • ISessionFactory のインスタンスをシングルトンとして StructureMap にブートストラップします
  • HttpRequest ごとのキャッシングを使用して、ISession を StructureMap に登録する

ただし、HttpRequest の最後に、セッション インスタンスでさまざまな片付けメソッドを呼び出す必要はありませんか (それは寿命が尽きたためです)。

Dispose() で片付けを行う場合、structuremap はこれを処理してくれますか?

そうでない場合、私は何をすべきですか?

ありがとう

アンドリュー

4

2 に答える 2

4

現在の 3 つのプロジェクトで、StructureMap と fluent-nhibernate (および NH Validator) を使用しています。そのうちの 2 つは ASP MVC アプリで、3 つ目は WCF Web サービスです。

あなたの一般的な戦略はほぼ正しいように思えます (コメントで既に指摘されているように、独自の Session または SessionFactory を作成しないことを除いて)。詳細については、ここから構成コードを入手してください。

http://brendanjerwin.github.com/development/dotnet/2009/03/11/using-nhibernate-validator-with-fluent-nhibernate.html

この投稿は実際には NH Validator と Fluent-NHibernate の統合に関するものですが、投稿の「ボーナス」セクションでセッション ファクトリと ISession を StructureMap に登録する方法を正確に確認できます。

RE: 整理: 常にトランザクション内で作業し、作業単位の最後にトランザクションをコミットまたはロールバックするようにしてください。NH は、必要な場合にのみ SQL 接続を使用し、その限られたリソースのクリーンアップを処理します。通常のガベージ コレクションは、セッション自体を処理します。

セッション ファクトリは非常に高価なオブジェクトであり、初期化は 1 回だけにして、アプリの存続期間中保持する必要があります。

于 2009-03-27T02:00:53.657 に答える
0

私は構造マップを使用していませんが、正しい方向に導く手助けができるかもしれません. Fluent nHibernate は、hbm ファイルよりも優れた選択肢です。

http リクエストに関しては、http リクエストが終了したときにセッションを閉じる必要はありません。そうしないと、nHibernate セッションがリークしてしまいます。構造マップがこれを処理するかどうかはわかりません。私が行ったことは、セッションを閉じる http モジュールがあることです。

1 つ注意すべき点は、すべてのデータ アクセスをトランザクションでラップし、nHibernate が実際にその変更をコミットすることを確認することです。セッション終了の一部としてこれを行うと、エラーを処理する機会を逃す可能性があります。この作業を行うためにあなたがしなければならなかったことを聞いてみたいです。

于 2008-12-21T19:09:45.680 に答える