2011-08-18 6 views
7

私は現在、この流暢NHibernateは構成を持っている:NHibernateの設定「current_session_context_class」可能な値と説明

public class NHibernateConfig 
{ 
    public static Configuration Configure() 
    { 
     var cfg = Fluently.Configure() 
      .Database(Config.PersistenceConfiguration) 
      .Mappings(m => 
          { 
           m.FluentMappings.AddFromAssemblyOf<SomeAssembly>(); 
           m.FluentMappings.Conventions.AddFromAssemblyOf<EnumConvention>();        }) 
      .ExposeConfiguration(x => x.SetProperty("current_session_context_class", "thread_static")) 
      .BuildConfiguration(); 
     return cfg; 

    } 
} 

私の質問は、公開されたプロパティについてです「current_session_context_class。」私はこれについて2つの値を知っています:thread_staticまたはウェブです。私の同僚はという別の値を指摘しました。このプロパティの値に関する既知のドキュメントはありますか?そうでない場合は、これらの値の説明がありますか?私はいくつかの説明のために何時間もGoogleを精査しましたが、有効な結果はありません。ここで

答えて

5

は、(任意の追加入力は歓迎されるであろう)これらを説明するための私の試みです:

Difference between CallSessionContext, ThreadLocalSessionContext and ThreadStaticSessionContext

あり、これらのセクションでは、標準NHのドキュメントであるが、私は、彼らは非常に操作を行うとは思いませんそれを説明したり、それをどのように正確に使用するかの例を挙げたりしてください。 NHのドキュメンテーションのリンクです

http://nhibernate.info/doc/nhibernate-reference/architecture.html#architecture-current-session

あなたがこれを使用する方法についてのStackOverflowにいくつかのまともな記事があります。
What is the best NHibernate session management approach for using in a multithread windows service application?
NHibernate.HibernateException: No session bound to the current context

+0

あなたのリンクは実際に私がこれまで見てきたほとんどのドキュメントを提供します。ありがとう。それはすべての包括的な文書ではありませんが、私はそれが存在しないと思います。 – johnofcross

+0

NHForgeリンクが壊れています。誰でも更新されたリンクがありますか? –

+1

@FrancoisBothaリンクを修正しました –

5

"managed_web" は、 "thread_static"、 "コール"、および "ウェブ" です可能な値。 NHibernateの構成では、このように構成された:

<property name="current_session_context_class">call</property> 

これを設定すると、あなたがSessionFactory.GetCurrentSessionを使用することができます()。自分でセッションをバインドしてバインドを解除する必要があります。一つのサンプル実装:

if (CallSessionContext.HasBind(_sessionFactory)) 
      { 
       session = SessionFactory.GetCurrentSession(); 
      } 
      else 
      { 
       session = SessionFactory.OpenSession(); 
       CallSessionContext.Bind(session); 
      } 

代わりのCallSessionContext、あなたもManagedWebSessionContextまたはThreadStaticSessionContextを使用することができます。

ManagedWebSessionContext - Asp.Netアプリケーションに適しています。セッションは、現在のHttpContext(バインディング時にパラメータとして提供される)にアタッチされます。

ManagedWebSessionContext.Bind(HttpContext.Current,session) 

ThreadStaticSessionContext - セッションが現在のスレッドに取り付けられている。(私は文句を言わないのスレッドが急に切り替えておくと、あなたの接続セッションが失われる可能性があるとしてこれを使用して奨励します)。

CallSessionContext - 非Webアプリケーションに適しています。セッションはCallContextに添付されます。私は間違っている可能性がありますが、これをSessionFactory自体に付けられたセッションとして想像しています。アプリケーション全体に1つのSessionFactoryがある限り、この方法では、同時にアクティブなセッションを取得することはありません。

+0

MangedWebとWebの違いは何ですか?またはそれらは同じですか? – johnofcross

+0

@johnofcross、managedwebは4.0.0.GAから廃止されました:* ManagedWebSessionContextが削除されました。 "managed_web"セッションコンテキストを使用するすべての設定ファイルは、 "web" –

関連する問題