Как получить текущий объект сеанса NHibernate из Castle ActiveRecord sessionScope

#nhibernate #session #object #castle-activerecord #session-scope

#nhibernate #сеанс #объект #castle-activerecord #область действия сеанса

Вопрос:

У меня есть открытый Castle ActiveRecord sessionScope. Мне нужно использовать сеанс nhibernate, завернутый в sessionScope.

Как я могу получить текущий объект сеанса NHibernate из sessionScope?

большое вам спасибо за ответы.

[обновление] у меня есть этот код

     ISession session = SessionScope.Current.GetSession( );
  

но я не знаю, какой переход к параметру getSession

Ответ №1:

Я решил это с помощью этого кода:

         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();
        }
  

Ответ №2:

Я думаю, что Activerecord sessionScope может обрабатывать несколько фабрик для разных типов, но если вы не используете это, я думаю, вам было бы полезно передать любой тип класса, который является постоянным:

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

Комментарии:

1. спасибо @jishi, но у меня такая ошибка: ключа нет в коллекции.

2. Используете ли вы ActiveRecordFacility с Windsor?

3. спасибо @jishi, я не использую ActiveRecordFacility с Windsor, но я попробовал решение, протестировал его и все прошло нормально. еще раз спасибо.

4. Понижающий голос, потому что решение не сработало, когда я попробовал его. Ответ с более высоким рейтингом сработал.