Я обновляю NHibernate с 4 до 5 для приложения Asp. Net и получаю одну ошибку:
'query.ToList()' threw an exception of type 'System.NotSupportedException'
Data: {System.Collections.ListDictionaryInternal}
HResult: -2146233067
HelpLink: null
InnerException: null
Message: "query ( query ( select_from ( from ( range ( . _0 RolePrivileges ) a ) ) ( select a ) ) ( where ( and ( == ( . a AccessTypeName ) ( : p12 ) ) ( or ( == ( : p13 ) true ) ( == ( . ( . param002 Role ) Id ) ( : p14 ) ) ) ) ) )"
Source: "NHibernate"
StackTrace: " at NHibernate.Hql.Ast.ANTLR.PolymorphicQuerySourceDetector.GetClassName(IASTNode querySource)\r\n at NHibernate.Hql.Ast.ANTLR.PolymorphicQuerySourceDetector.Process(IASTNode tree)\r\n at NHibernate.Hql.Ast.ANTLR.AstPolymorphicProcessor.Process()\r\n at NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(IASTNode ast, String queryIdentifier, String collectionRole, Boolean shallow, IDictionary`2 filters, ISessionFactoryImplementor factory)\r\n at NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(IQueryExpression queryExpression, Boolean shallow, IDictionary`2 enabledFilters)\r\n at NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(IQueryExpression queryExpression, Boolean shallow)\r\n at NHibernate.Impl.AbstractSessionImpl.CreateQuery(IQueryExpression queryExpression)\r\n at NHibernate.Linq.DefaultQueryProvider.PrepareQuery(Expression expression, IQuery& query)\r\n at NHibernate.Linq.DefaultQueryProvider.Execute(Expression expression)\r\n at NHib
ernate.Linq.DefaultQueryProvider.Execute[TResult](Expression expression)\r\n at Remotion.Linq.QueryableBase`1.GetEnumerator()\r\n at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)\r\n at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)"
вышеуказанный запрос представляет собой IQueryable с цепочкой Where ( Выражение >) применил. У меня вопрос, что именно не поддерживается в NHibernate 5 в моем случае? Он отлично работает с NHibernate 4.
Полный запрос строится в длинных цепочках вызовов функций, в которых к запросу добавляется много Where (), я могу идентифицировать неудачное место:
var predicateReadPrivilege = PredicateBuilder.Create<Resource>(x =>
x.RType.RolePrivileges.Where(a => a.AccessTypeName == accessLevel).AsQueryable().Where(_ => true).Any());// _predicatePrivilegeOnResourceType).Any());
в приведенном выше коде, это проблема AsQueryable () (как вы можете видеть, даже если это избыточный критерий), если я удалю его, это не вызовет исключения.
enter code here