2009-08-14 16 views
0

私はWebアプリケーションを構築しています。データベースを呼び出すたびにセッションが必要です。nhibernateとセッションを明確にしてください

私はセッションオブジェクトの作成が非常に高価であることを理解しています。

私はここにリポジトリパターンを以下午前:http://web.archive.org/web/20110503184234/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/10/08/the-repository-pattern.aspx

彼はセッションを取得するためには、UnitOfWorkと呼ばれるものを使用しています。

Webアプリケーションの場合、Request.Itemsコレクションにセッションを格納しないでください。だから、そのリクエストは1回につき1回しか作成されません

本当にUofWが必要ですか?

答えて

0

NHibernateの場合、キークラスはSessionFactoryであり、SessionProviderはあなたのためにそれを実装しています。 SessionFactoryを生かしたままにしておくと、セッションが処理されます。

また、IoCにSessionFactoryを保存する人もいるようです。

2

セッションは作業単位であり、基本的に変更を保存してからdbにフラッシュします。起動時に静的セッションファクトリを保存し、それを使用してWeb要求ごとに1つのセッションを作成します。 - Request.Itemsは、セッションを入れる有効な場所のようです。

リポジトリ・パターンは、作業ユニット上のラッパーです。リポジトリパターンはUoWパターンと異なり、UoWがフラッシュを待つ間にrepo.Save(obj)はobjをdbに直接保存する必要があります。

私のアドバイスは、リポジトリパターンをスキップしてセッションを管理するために使用します(http://ayende.com/Blog/archive/2009/04/17/repository-is-the-new-singleton.aspxを参照)直接

+0

私はすべての私のエンティティのための基本的なcrudを与えてくれるので、0のコードが書かれています、それは悪いですか?! :) – mrblah

+1

ISessionインターフェイスはすでに基本的なCRUDを与えています(.Get )、.Load 、.Delete、.SaveOrUpdate)、およびHQL、criteria APIまたはNHibernate.Linqを使用した複雑なクエリです。 – mcintyre321

+0

http://ayende.com/Blog/archive/2009/08/05/do-you-need-a-framework.aspxも参照してください。 – mcintyre321

0

をISessionを使用することです:

HybridSessionBuilder

それはあなたがへのアクセスを管理していますアプリケーション全体で使用される単一のセッション。

関連する問題