繁体   English   中英

NHibernate会话生命周期管理

[英]NHibernate session lifetime management

我想,对于每个在ASP.NET应用程序中遇到NHibernate的人来说,这都是一个普遍的问题,但是即使经过两个小时的搜索,我仍然不知道如何正确管理ISession的生存期。 我知道它应该是每个请求一个ISession实例,但是问题是我的ISessionFactory被注入到基础结构层存储库中的调用堆栈的深处,这由域类调用,然后才由控制器调用。 我希望我的域服务保持单例状态,以防止它们重现每个请求,但我不能将依赖于请求的服务注入单例服务中。 另一方面,我无法在存储库中手动打开和关闭会话,因为这样会失去“惰性”。 因此,问题是,如何在IOC容器中注册ISession,以使其在每个请求中均得到新的请求,而只能在单例存储库中使用它?

您可以在启动请求时创建会话,然后绑定到请求上下文(在您的情况下为请求-确保配置当前会话上下文),

session = sessionFactory.OpenSession();
NHibernate.Context.CurrentSessionContext.Bind(session);

然后在存储库中,您可以使用sesssionFactory获取当前会话

session = this.sessionFactory.GetCurrentSession();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM