Обработка сеанса NHibernate в BeginRequest и EndRequest - PullRequest
0 голосов
/ 08 ноября 2011

Я открываю сеанс в BeginRequest и пытаюсь закрыть его в EndRequest.Я время от времени вижу ошибку, которая выглядит следующим образом:

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)

В соответствии с этим вопросом Всегда ли запросы ASP.NET всегда BeginRequest и EndRequest в одном потоке? , я не могуубедитесь, что BeginRequest и EndRequest будут запускаться в одном потоке.Как мне обращаться с открытием и закрытием сеансов NHibernate, чтобы не получать эти ошибки?

Спасибо!
Крис

1 Ответ

0 голосов
/ 09 ноября 2011

Если вы используете любой контейнер IoC, вы можете получить ISession для конструктора контроллера.

Я обычно использую атрибут для метода, например this

...