如何从Castle ActiveRecord SessionScope检索当前NHibernate会话对象

如何从Castle ActiveRecord SessionScope检索当前NHibernate会话对象,nhibernate,session,object,castle-activerecord,session-scope,Nhibernate,Session,Object,Castle Activerecord,Session Scope,我有一个开放的Castle ActiveRecord会话范围。 我需要使用包装在SessionScope中的nhibernate会话 如何从SessionScope检索当前的NHibernate会话对象 非常感谢您的回复 [更新] 我有这个密码 ISession session = SessionScope.Current.GetSession( ); 但是我不知道传递给GetSession参数的是什么,我认为Activerecord SessionScope可以处理不同类型的多个工厂

我有一个开放的Castle ActiveRecord会话范围。 我需要使用包装在SessionScope中的nhibernate会话

如何从SessionScope检索当前的NHibernate会话对象

非常感谢您的回复

[更新] 我有这个密码

    ISession session = SessionScope.Current.GetSession( );

但是我不知道传递给GetSession参数的是什么,我认为Activerecord SessionScope可以处理不同类型的多个工厂,但是如果您不利用它,我认为您最好传入任何类型的持久化类:

ISession session = SessionScope.Current.GetSession( typeof ( YourClass ) );

我用以下代码解决了这个问题:

        ISessionFactoryHolder holder = ActiveRecordMediator.GetSessionFactoryHolder();
        ISessionScope activeScope = holder.ThreadScopeInfo.GetRegisteredScope();
        ISession session = null;
        var key = holder.GetSessionFactory(typeof(ActiveRecordBase));
        if (activeScope == null)
        {
            session = holder.CreateSession(typeof(ActiveRecordBase));
        }
        else
        {
            if (activeScope.IsKeyKnown(key))
                session = activeScope.GetSession(key);
            else
                session = holder.GetSessionFactory(typeof(ActiveRecordBase)).OpenSession();
        }

谢谢@jishi,但我有一个错误:密钥不在集合中。您是否将ActiveRecordFacility用于Windsor?谢谢@jishi,我没有将ActiveRecordFacility用于Windsor,但我尝试了一个解决方案,我测试了它,结果很好。再次感谢你。投否决票,因为我尝试时解决方案无效。投票率较高的答案确实有效。