Я конвертирую старый проект в Nhibernate 5 вместе с Redis провайдером кэша второго уровня , созданным командой NHibernate.Я сталкиваюсь со странными проблемами, когда использую кеш запросов, как это:
session.GetSession().Query<Entity>()
.WithOptions(o => o.SetCacheable(true))
.Where(x=> x.y.Id == yId)
.ToArray();
Если я удаляю SetCacheable
, это работает.Исключение могут исходить от разных сущностей, некоторые из них будут работать, если Redis сброшен, а некоторые нет.Код работал с NH5 / Syscache и NH4 / Couchbase провайдером.Результирующий стек вызовов следует.Эта ошибка говорит по-фински, что ключ не может быть нулевым.Заранее спасибо.
РЕДАКТИРОВАТЬ: После изменения кода (то есть удалил один кешируемый, где даже не помогала очистка, изменил некоторые асинхронные операции на синхронизацию и другие вещи, которые мне не нужно было менять) Я нахожусь в точке, где система запускается, когда все запускается на Redis.Если IIS Express перезапущен или запущены рабочие узлы, происходит ошибка.Присоединение новых узлов - это своего рода смысл всего этого.
[ArgumentNullException: Arvo ei voi olla tyhjäarvo.
Parametrin nimi: key]
System.Collections.Generic.Dictionary`2.FindEntry(TKey key) +13006529
System.Collections.Generic.Dictionary`2.TryGetValue(TKey key, TValue& value) +13
NHibernate.Impl.SessionFactoryObjectFactory.GetNamedInstance(String name) +165
NHibernate.Impl.SessionFactoryImpl.GetRealObject(StreamingContext context) +134
System.Runtime.Serialization.ObjectManager.ResolveObjectReference(ObjectHolder holder) +65
System.Runtime.Serialization.ObjectManager.DoFixups() +267
System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) +143
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) +186
NHibernate.Caches.CoreDistributedCache.CoreDistributedCache.Get(Object key) +236
NHibernate.Cache.StandardQueryCache.Get(QueryKey key, ICacheAssembler[] returnTypes, Boolean isNaturalKeyLookup, ISet`1 spaces, ISessionImplementor session) +212
NHibernate.Loader.Loader.GetResultFromQueryCache(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IQueryCache queryCache, QueryKey key) +230
NHibernate.Loader.Loader.ListUsingQueryCache(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces) +62
NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces) +54
NHibernate.Loader.Hql.QueryLoader.List(ISessionImplementor session, QueryParameters queryParameters) +48
NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.List(ISessionImplementor session, QueryParameters queryParameters) +328
NHibernate.Engine.Query.HQLQueryPlan.PerformList(QueryParameters queryParameters, ISessionImplementor session, IList results) +556
NHibernate.Impl.SessionImpl.List(IQueryExpression queryExpression, QueryParameters queryParameters, IList results, Object filterConnection) +183
[GenericADOException: Could not execute query[SQL: SQL not available]]
NHibernate.Impl.SessionImpl.List(IQueryExpression queryExpression, QueryParameters queryParameters, IList results, Object filterConnection) +252
NHibernate.Impl.SessionImpl.List(IQueryExpression queryExpression, QueryParameters queryParameters, IList results) +15
NHibernate.Impl.AbstractSessionImpl.List(IQueryExpression queryExpression, QueryParameters parameters) +144
NHibernate.Impl.AbstractQueryImpl2.List() +118
NHibernate.Linq.DefaultQueryProvider.ExecuteQuery(NhLinqExpression nhLinqExpression, IQuery query, NhLinqExpression nhQuery) +36
NHibernate.Linq.DefaultQueryProvider.ExecuteQuery(NhLinqExpression nhLinqExpression, IQuery query) +14
NHibernate.Linq.DefaultQueryProvider.Execute(Expression expression) +40
NHibernate.Linq.DefaultQueryProvider.Execute(Expression expression) +36
Remotion.Linq.QueryableBase`1.GetEnumerator() +53
System.Linq.Buffer`1..ctor(IEnumerable`1 source) +205
System.Linq.Enumerable.ToArray(IEnumerable`1 source) +76