5

我一直在嘗試使用流暢的nhibernate 1.2和NHibernate 3.1來升級FNH 1.3和NH 3.2,這一切似乎工作,除了現在我得到一個異常一個.List()命令。索引超出了數組的範圍 - NHibernate 3.2

異常&類型的消息是... NHibernate.Exceptions.GenericADOException 無法執行找到[SQL:SQL不可] 和內部異常... System.IndexOutOfRangeException 指數的邊界之外陣列。

我已經在SQL Server中對查詢進行了概要分析,我認爲它與AppFabric緩存和NH 3.2有關,因爲NH生成的查詢很好。

代碼中的任何內容都不會改變我的FNH和NH引用。

下面是我在C#查詢...

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

和下面是由FNH生成的映射HBM其處理不當更改版本之間...

<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> 

在NH 3.2源的下面一行是在拋出異常......

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

和調用堆棧...

> 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>() 

所以任何幫助將不勝感激,如果你想要更多的信息讓我知道,謝謝。

+0

你是怎麼跟AppFabric交談的?您是否使用NHContrib的Velocity提供程序? – PhilPursglove

+0

不,我們正在使用使用Microsoft.ApplicationServer.Caching程序集。 – electricsheep

+0

我可能(可能是)錯了,但我不認爲* AppFabric的問題在這裏。我的理解是,要使用AppFabric(或任何其他緩存)和NHibernate作爲二級緩存,您需要在提供程序中包含對它的支持(有關詳細信息,請參見http://nhforge.org/doc/nh/en/)。 index.html#caches),它不會自動發生;因此我對提供者的問題。 – PhilPursglove

回答