2011-08-18 62 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。」我知道這兩個值:thread_staticweb。我的一位同事指出了另一個值,即致電。有沒有這個屬性值的任何已知的文檔?如果沒有,這些值是否有很好的描述?我在谷歌上搜尋了幾個小時,但沒有得到有效的結果。

回答

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()。你必須自己綁定和取消綁定會話。一個簡單的實現:除了CallSessionContext的

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

,你也可以使用ManagedWebSessionContext或ThreadStaticSessionContext。

ManagedWebSessionContext - 適用於Asp.Net應用程序。會話附加到當前的HttpContext(在綁定時作爲參數提供)。

ManagedWebSessionContext.Bind(HttpContext.Current,session) 

ThreadStaticSessionContext - 會話連接到當前線程(我不會鼓勵使用這個作爲線程保持開關突然和你連接的會話可能會丟失)。

CallSessionContext - 適用於非Web應用程序。會話附加到CallContext。我可能是錯的,但我認爲這是SessionFactory本身的會話。只要您有一個SessionFactory用於整個應用程序,這種方法將確保您永遠不會獲得併發的活動會話。

+0

MangedWeb和Web有什麼區別?還是那些一樣? – johnofcross

+0

@johnofcross,managedweb自4.0.0.GA棄用:*刪除了ManagedWebSessionContext。任何使用「managed_web」會話上下文的配置文件現在都應該使用「web」 –