流暢な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でクエリのプロファイルを作成しましたが、NHによって生成されたクエリが適切であるため、AppFabricキャッシュとNH 3.2の問題があると思います。
コード内の何も私のFNHとNHの参照が変更されていません。以下
NH 3.2源で
<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>
...以下
return ResourceRepository.Query()
.LeftOuterJoin(r => r.ResourceCorpus,() => resourceCorpusAlias)
.LeftOuterJoin(r => r.ResourceType,() => resourceTypeAlias)
.Cachable()
.List();
とはバージョン間で変更hasnt FNHによって生成されたマッピングHBMです... C#で私のクエリであります次の行は例外がスローされる場所です...
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>()
これ以上の情報をご希望の場合は、ありがとうございます。
どのようにAppFabricと話していますか? NHContribのVelocityプロバイダを使用していますか? – PhilPursglove
いいえ、Microsoft.ApplicationServer.Cachingアセンブリを使用しています。 – electricsheep
私は(これはおそらく)間違っている可能性がありますが、私は* AppFabricの問題は考えていません。私の理解では、NHibernateを第2レベルのキャッシュとしてAppFabric(または他のキャッシュ)を使用するには、プロバイダとのサポートを含める必要があります(詳細はhttp://nhforge.org/doc/nh/en/ index.html#キャッシュ)、自動的に行われるだけではありません。したがって、プロバイダに関する私の質問。 – PhilPursglove