5

Próbowałem uaktualnić projekt przy użyciu płynnego nhibernate 1.2 i NHibernate 3.1 do FNH 1.3 i NH 3.2, i wszystko wydaje się działać, z wyjątkiem teraz mam wyjątek na a. Polecenie .List().Indeks był poza obszarem tablicy - NHibernate 3.2

Wyjątkiem są wiadomości typu & ... NHibernate.Exceptions.GenericADOException Nie można wykonać znaleźć [SQL: SQL niedostępna] i wewnętrzny wyjątek ... System.IndexOutOfRangeException Index był poza granicami tablica.

Mam profilowane zapytanie w SQL Server i myślę, że jest to problem z pamięcią podręczną AppFabric i NH 3.2, ponieważ zapytanie wygenerowane przez NH jest w porządku.

Nic w kodzie się nie zmieniło tylko moje referencje FNH i NH.

Poniżej jest mój kwerendy w języku C# ...

return ResourceRepository.Query() 
         .LeftOuterJoin(r => r.ResourceCorpus,() => resourceCorpusAlias) 
         .LeftOuterJoin(r => r.ResourceType,() => resourceTypeAlias) 
         .Cachable() 
         .List(); 

i poniżej jest HBM mapowanie generowane przez FNH który nie zmodernizowano zmieniło między wersjami ...

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="false"> 
    <class xmlns="urn:nhibernate-mapping-2.2" schema="[Reference]" mutable="false" name="MyAssembly.Reference.Resource, MyAssembly.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="`Resource`"> 
    <cache usage="read-only" /> 
    <id name="Id" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" unsaved-value="0"> 
     <column name="Id" /> 
     <generator class="assigned" /> 
    </id> 
    <bag name="ResourceCorpus" mutable="false"> 
     <cache usage="read-only" /> 
     <key> 
     <column name="ResourceId" /> 
     </key> 
     <one-to-many class="MyAssembly.Reference.ResourceCorpus, MyAssembly.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
    </bag> 
    <property name="TokenName" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <column name="TokenName" /> 
    </property> 
    <property name="Description" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <column name="Description" /> 
    </property> 
    <many-to-one class="MyAssembly.Reference.ResourceType, MyAssembly.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" fetch="select" name="ResourceType"> 
     <column name="ResourceTypeId" /> 
    </many-to-one> 
    </class> 
</hibernate-mapping> 

W NH 3.2 źródła następująca linia to miejsce, w którym wyjątek został zgłoszony ...

if (nonCacheable != null && nonCacheable[i]) 

oraz stos wywołań ...

> NHibernate.dll!NHibernate.Type.TypeHelper.Disassemble(object[] row, NHibernate.Type.ICacheAssembler[] types, bool[] nonCacheable, NHibernate.Engine.ISessionImplementor session, object owner) 
    NHibernate.dll!NHibernate.Cache.StandardQueryCache.Put(NHibernate.Cache.QueryKey key, NHibernate.Type.ICacheAssembler[] returnTypes, System.Collections.IList result, bool isNaturalKeyLookup, NHibernate.Engine.ISessionImplementor session) 
    NHibernate.dll!NHibernate.Loader.Loader.PutResultInQueryCache(NHibernate.Engine.ISessionImplementor session, NHibernate.Engine.QueryParameters queryParameters, NHibernate.Type.IType[] resultTypes, NHibernate.Cache.IQueryCache queryCache, NHibernate.Cache.QueryKey key, System.Collections.IList result) 
    NHibernate.dll!NHibernate.Loader.Loader.ListUsingQueryCache(NHibernate.Engine.ISessionImplementor session, NHibernate.Engine.QueryParameters queryParameters, Iesi.Collections.Generic.ISet<string> querySpaces, NHibernate.Type.IType[] resultTypes) 
    NHibernate.dll!NHibernate.Loader.Criteria.CriteriaLoader.List(NHibernate.Engine.ISessionImplementor session) 
    NHibernate.dll!NHibernate.Impl.SessionImpl.List(NHibernate.Impl.CriteriaImpl criteria, System.Collections.IList results) 
    NHibernate.dll!NHibernate.Impl.CriteriaImpl.List(System.Collections.IList results) 
    NHibernate.dll!NHibernate.Impl.CriteriaImpl.List<MyAssembly.Reference.Resource>() 

Więc jakaś pomoc byłaby bardzo ceniona, jeśli chcesz więcej informacji daj mi znać, dziękuję.

+0

W jaki sposób rozmawiasz z AppFabric? Czy korzystasz z usługi Velocity od NHContrib? – PhilPursglove

+0

Nie używamy zestawu Microsoft.ApplicationServer.Caching. – electricsheep

+0

Mogę być (i prawdopodobnie tak) źle o tym, ale nie sądzę * AppFabric problem tutaj. Rozumiem, że aby używać AppFabric (lub dowolnej innej pamięci podręcznej) z NHibernate jako pamięci podręcznej drugiego poziomu, należy dołączyć do niego obsługę z dostawcą (niektóre szczegóły na http://nhforge.org/doc/nh/en/ index.html # caches), nie dzieje się to automatycznie; stąd moje pytanie o dostawcę. – PhilPursglove

Odpowiedz

4

Po zakorzenienia w całym internecie (aka Google) trochę więcej znalezionych ten ...

https://nhibernate.jira.com/browse/NH-2961

Okazuje się, że jest to znany błąd w NH 3.2 myślałem, że będzie pisać tutaj na wypadek gdyby ktoś inny jest posiadanie ten przypadek.

+0

również w nhibernate 3.3.1.4000 – giammin

Powiązane problemy