C#学习教程:如何在asp.netmvc中使用Nhibernate实现session-per-request模式global.asax文件创建nhibernate会话,它被传递给服务方法的构造函数。service方法中我用session做CRUD操作,没问题。但是,当出现多个请求或并行事务时,nhibernate会抛出一些异常。阅读论坛后我开始知道Nhibernate会话不是线程安全的。如何使我的应用程序(ASP.NETmvc)线程安全以使用并行事务?使线程安全的唯一方法是为每个请求创建一个新会话,您可以在NHibernate配置中使用current_session_context_class属性到managed_web。在global.asaxprotectedvoidApplication_BeginRequest(objectsender,EventArgse){varsession=SessionFactory.OpenSession();CurrentSessionContext.Bind(session);}protectedvoidApplication_EndRequest(objectsender,EventArgse){varsession=SessiontextCurrent(SessionFactory);//提交事务并关闭会话对于Autofac(有关更多信息,请参见此问题),containerBuilder.Register(x=>{returnx.Resolve().OpenSession();}).As().InstancePerHttpRequest();将其存储在HttpContext中。将此添加到您的global.asaxpublicstaticStringsessionkey="current.session";publicstaticISessionCurrentSession{get{return(ISession)HttpContext.Current.Items[sessionkey];}设置{HttpContext.Current.Items[sessionkey]]=value;}}protectedvoidApplication_BeginRequest(){CurrentSession=SessionFactory.OpenSession();}protectedvoidApplication_EndRequest(){if(CurrentSession!=null)CurrentSession.Dispose();}这是组件注册上面是C#学习教程:HowtouseNhibernatetoimplementthesession-per-requestmodesharinginasp.netmvc。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——().UsingFactoryMethod(()=>MvcApplication.CurrentSession).LifeStyle.PerWebRequest);}}本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
