2011-11-08 91 views
0

我在BeginRequest上打開一個會話並試圖在EndRequest上關閉它。我偶爾看到的,看起來像這樣的錯誤:BeginRequest和EndRequest上的NHibernate會話處理

Possible nonthreadsafe access to session 
at NHibernate.Action.EntityDeleteAction.Execute() 
at NHibernate.Engine.ActionQueue.Execute(IExecutable executable) 
at NHibernate.Engine.ActionQueue.ExecuteActions(IList list) 
at NHibernate.Engine.ActionQueue.ExecuteActions() 
at NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource session) 
at NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent event) 
at NHibernate.Impl.SessionImpl.Flush() 
at ACC.Web.Modules.NHibernateSessionModule.CommitSession(ISession session) 
at ACC.Web.Modules.NHibernateSessionModule.ApplicationEndRequest(Object sender, EventArgs e) 
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

根據這個問題Do ASP.NET Requests always BeginRequest and EndRequest on the same thread?,我不能肯定的BeginRequest和EndRequest將火一樣的線程上。我應該如何處理打開和關閉NHibernate會話,以便我不會出現這些錯誤?

謝謝!
Chris

回答

0

如果您使用任何IoC容器,則可以接收控制器構造函數上的ISession。

我通常在方法上使用屬性,如this