ActiveRecord 3 RC 1 с NHibernate 3.2 вызывает непредвиденное исключение

Поскольку на днях я почувствовал себя авантюристом, я решил скомпилировать ActiveRecord 3 RC 1 с NHibernate 3.2 и посмотреть, что произойдет.
Помимо критических изменений, которые я исправил, я столкнулся с очень странным поведением в отношении запросов SessionScopes и Linq.
Обычно я не делаю этого. Мне не нужно использовать область сеанса при использовании запроса Linq, но после того, как я скомпилировал ActiveRecord 3 RC 1 с NHibernate 3.2, я получил следующую ошибку:

Could not found a registered Scope. Linq queries needs a underlying a scope to be functional.
Stack Trace:    at Castle.ActiveRecord.Framework.ActiveRecordLinqBase`1.get_Queryable()
   at Castle.ActiveRecord.Framework.ActiveRecordLinq.AsQueryable[T]()
   at Danel.Nursing.Scheduling.Actions.DataServices.BranchDataService.GetBranches() in D:\Work\Default\Scheduling\Danel.Nursing.Scheduling.Actions\DataServices\BranchDataService.cs:line 21
   at Danel.Nursing.Scheduling.Controllers.SmallHoursAmountController.<>c__DisplayClassb.<SetBranches>b__a() in D:\Work\Default\Scheduling\Danel.Nursing.Scheduling\Controllers\SmallHoursAmountController.cs:line 275
   at Danel.Nursing.Scheduling.Viewlets.WaitForAction.Worker_DoWork(Object sender
DoWorkEventArgs e) in D:\Work\Default\Scheduling\Danel.Nursing.Scheduling\Viewlets\WaitForAction.cs:line 40

Похоже, ошибка отсюда:

public class ActiveRecordLinqBase<T> : ActiveRecordBase<T>
{
        public static IOrderedQueryable<T> Queryable
        {
            get
            {
                var activeScope = holder.ThreadScopeInfo.GetRegisteredScope(); // The registered scope is null...

                if (activeScope == null)
                    throw new ActiveRecordException("Could not found a registered Scope. Linq queries needs a underlying a scope to be functional.");

                var key = holder.GetSessionFactory(typeof(T));

                var session = activeScope.IsKeyKnown(key) ? activeScope.GetSession(key) : SessionFactoryHolder.OpenSessionWithScope(activeScope, key);

                return session.AsQueryable<T>();
            }
        }
    }

Что изменилось в том, что теперь мне нужно открыть новый SessionScope?


person the_drow    schedule 24.08.2011    source источник
comment
а этого не случилось с теми же AR и NH 3.1?   -  person Mauricio Scheffer    schedule 24.08.2011
comment
@Mauricio Scheffer Нет.   -  person the_drow    schedule 24.08.2011
comment
@ Маурисио Схеффер: Так что же может быть не так?   -  person the_drow    schedule 26.08.2011


Ответы (1)


У меня тоже были проблемы с функцией Queryable. Хотя у меня не было проблемы с областью сеанса, у меня возникли проблемы с сохранением обновления для объектов, полученных с помощью IQueryable. Кажется, что новый сеанс никогда не был зарегистрирован в активной области. Я также изменил поиск области, так что, возможно, это также поможет вам:

   public new IOrderedQueryable<T> Queryable
    {
        get
        {
            ISessionFactory key = ActiveRecordMediator<T>.GetSessionFactoryHolder().GetSessionFactory(typeof(T));
            ISessionScope activeScope = SessionScope.Current;

            if (activeScope == null)
                throw new ActiveRecordException("Could not found a registered Scope. Linq queries needs a underlying a scope to be functional.");

            var session = activeScope.IsKeyKnown(key) ? activeScope.GetSession(key) : OpenSessionWithScope(activeScope, key);

            if (!activeScope.IsKeyKnown(key))
            {
                activeScope.RegisterSession(key,session);
            }
            return session.AsQueryable<T>();
        }
    }
person Robert van Hoornaar    schedule 22.11.2011