Nhibernate Castle活动记录中的会话管理

Nhibernate Castle活动记录中的会话管理,nhibernate,castle-activerecord,Nhibernate,Castle Activerecord,如果我在nHibernate上使用Castle Active Record,如何管理会话。如果我直接使用nHibernate,我基本上可以自己管理ISession的生命周期。但是当我使用Castle AR时,它并没有给我一种管理会话生命周期的方法。我希望每个线程使用一个会话 我正在WCF服务中使用Castle AR,希望根据WCF请求使用会话。我假设您正在使用web应用程序。不是这样吗 有几种方法可以做到这一点- 最简单的方法是使用SessionScopeWebModule为每个请求提供一个会

如果我在nHibernate上使用Castle Active Record,如何管理会话。如果我直接使用nHibernate,我基本上可以自己管理ISession的生命周期。但是当我使用Castle AR时,它并没有给我一种管理会话生命周期的方法。我希望每个线程使用一个会话



我正在WCF服务中使用Castle AR,希望根据WCF请求使用会话。

我假设您正在使用web应用程序。不是这样吗

有几种方法可以做到这一点-


最简单的方法是使用SessionScopeWebModule为每个请求提供一个会话。

在Castle ActiveRecord中,您希望SessionScope:

using(new SessionScope())
{
  ; // do work here
}
如果出于某种原因需要访问SessionScope内的ISession,可以执行以下操作:

ISession dbSession = Castle.ActiveRecord.ActiveRecordMediator
      .GetSessionFactoryHolder().CreateSession(
          typeof(Castle.ActiveRecord.ActiveRecordBase));
更多文档如下:

在这里:


我正在使用web应用,但web应用代表调用使用Castle AR的WCF服务。我想根据WCF请求使用会话?不起作用,当您尝试获取dbSession时,将对象引用未设置为对象错误的实例。您知道在会话工厂持有者上调用
.CreateSession()
是否会创建当前作用域吗?当我尝试时,SessionScope.Current为null,因此延迟加载失败。必须能够初始化当前会话范围,因为
SessionScopeWebModule
可以初始化当前会话范围。不管怎样,我已经搞定了。您只需新建一个
SessionScope
,它就在当前线程中注册了它。