#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. Понижающий голос, потому что решение не сработало, когда я попробовал его. Ответ с более высоким рейтингом сработал.