1

NHibernateを介してデータベースと通信するWCFWebサービスバックエンドを使用してASP.NETMVCWebサイトを構築しています。現在、POCとして、必要なすべてのメソッドを含むUserServiceという1つのWebサービスがあります。私が抱えている問題は、NHibernate構成をラップするDataRepositoryオブジェクトがあることです。新しいデータリポジトリオブジェクトを作成すると、NHibernateの構成とマッピング、キャッシュなどが読み込まれます。ユーザーセッションのWebサイトでは、セッションの間、このDataRepositoryオブジェクトを開いたままにしておくのは意味がないためです。呼び出しごとにNHibernateを再構成し、NHibernateキャッシングの恩恵を受けるために、すべてのWebサービスメソッドで同じデータリポジトリを利用できるようにしたい。

UserService.csクラスレベルで静的DataRepositoryオブジェクトを作成し、セッションごとにインスタンス化するようにWebサイトを構成するという答えはここにありますか?つまり、各ユーザーセッションには、セッションの存続期間中、独自の静的データリポジトリオブジェクトが含まれますか?それとももっと良い方法はありますか?上記のアプローチで私が考えていなかったことはありますか?

4

1 に答える 1

1

より良いアプローチを提案します。リポジトリを共有しないでください。休止状態のセッションを共有して、リポジトリに注入できるようにしてください。

 public class DataRepository {
     public DataRepository ( Session session ) {
     }
 }

このようにして、リポジトリとセッションの両方の存続期間を正確に制御できます。特に、(リクエストスコープ内で)共有セッションを持つことはできますが、常に新しい(一時的な)リポジトリを作成します。

于 2012-11-23T14:27:43.373 に答える