Как получить текущий объект NHibernate Session из Castle ActiveRecord SessionScope - PullRequest
6 голосов
/ 03 ноября 2011

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

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

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

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

    ISession session = SessionScope.Current.GetSession( );

но я не знаю, что передать параметру GetSession

Ответы [ 2 ]

9 голосов
/ 04 ноября 2011

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

        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();
        }
0 голосов
/ 03 ноября 2011

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

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