2009-07-17 68 views

回答

6

你是負責設置當前會話在會話上下文中。請參閱NHibernate文檔的this section。如果你還沒有這樣做,那麼將沒有當前會話來檢索。

13

就像David M說的,你需要確保你綁定了你的NHibernate會話。下面是我做的,現在在我的ASP.NET應用程序的方式:

public class NHHttpModule : IHttpModule 
{ 
    public void Init(HttpApplication context) 
    { 
     context.EndRequest += ApplicationEndRequest; 
     context.BeginRequest += ApplicationBeginRequest; 
    } 

    public void ApplicationBeginRequest(object sender, EventArgs e) 
    { 
     CurrentSessionContext.Bind(NHSessionFactory.GetNewSession()); 
    } 

    public void ApplicationEndRequest(object sender, EventArgs e) 
    { 
     ISession currentSession = CurrentSessionContext.Unbind(
      NHSessionFactory.GetSessionFactory()); 
     currentSession.Close(); 
     currentSession.Dispose(); 
    } 

    public void Dispose() 
    { 
     // Do nothing 
    } 
} 

我創建一個綁定在每次請求我的會議自定義的HttpModule,然後我這個模塊添加到我的web.config這樣的:

<httpModules> 
    <add name="NHHttpModule" type="MyApplication.Core.NHHttpModule, MyApplication, 
    Version=1.0.0.0, Culture=neutral" />  
</httpModules> 

我確定你的配置不同於此,但這只是我綁定會話的一個例子。希望這有所幫助。

11

Studio 2010將創建2個httpModules節,一個用於IIS 7.確保在system.web中註冊您的nhibernate httpmodule。

+0

天才,謝謝你的回答,救了我從一個巨大的'臉上的蛋'事件:) – 2010-10-06 08:02:09

相關問題