NHibernate上的CurrentSessionContext

时间:2012-08-01 08:29:33

标签: c# nhibernate

我正在使用多个会话工厂重构我们的UnitOfWork代码。我们的UoW迭代所有会话工厂打开它们并绑定到上下文 - 这就是问题所在。

 public void InitializeSessions()
 {
  foreach (ISessionFactory sessionFactory in _sessionFactories)
  {
    if ( NHibernate.Context.CurrentSessionContext.HasBind(sessionFactory))
    {
      continue;
    }

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

    session.BeginTransaction();
  }
 }

这个UoW必须是通用的 - 这意味着它可以被WCF,Web或单元测试使用。因此,对于WCF应用程序,我们在nh配置会话上下文中设置为“WcfOperationSessionContext”,用于Web,例如。 “ManagedWebSessionContext”。发生的问题是我们不能使用类CurrentSessionContext的静态方法,因为方法“Bind”需要ISessionFactoryImplementor继承自“CurrentSessionContext”。经过一些搜索后,我们发现在实例中它直接调用了这个在nh配置文件中设置的上下文,但在其他实现中,他们严格使用“CurrentSessionContext”。

这应该怎么做?如果我们应该直接调用在nh config中配置的“ICurrentSessionContext”的上下文实现,或者总是使用“CurrentSessionContext”(这不像我提到的那样工作)?

1 个答案:

答案 0 :(得分:2)

对于CurrentSessionContext,您希望使用WebSessionContext而不是ManagedWebSessionContext,根据文档:http://nhibernate.info/doc/nh/en/index.html#architecture-current-session