Nhibernate 5 Redis провайдер кеша 2-го уровня и кеш запросов - PullRequest
0 голосов
/ 03 октября 2018

Я конвертирую старый проект в 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
...