c# - 索引超出数组范围 - NHibernate 3.2

标签 c# nhibernate fluent-nhibernate appfabric nhibernate-caches

我一直在尝试使用流畅的 nhibernate 1.2 和 NHibernate 3.1 将项目升级到 FNH 1.3 和 NH 3.2,这一切似乎都有效,除了现在我在 .List() 命令上遇到异常。

异常类型和消息是... 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>()

因此,我们将不胜感激任何帮助,如果您需要更多信息,请告诉我,谢谢。

最佳答案

在搜索互联网(又名谷歌)后发现了这个...

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

事实证明它是 NH 3.2 中的一个已知错误,我想我会在这里发布以防其他人遇到此问题。

关于c# - 索引超出数组范围 - NHibernate 3.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8925500/

相关文章:

c# - 在C#中显示图像和播放声音

c# - 什么是 PCRE 兼容语法? C# PCRE 兼容吗?

c# - ORA-02289 :sequence does not exist

sql-server-2008 - FluentNHibernate 查询排序规则

c# - 读取文件的最有效方式

c# - 如何发送包含多个图像的 HTML 电子邮件

hibernate - NHibernate 和 Memcached - 应该启用 use_minimal_puts 吗?

nhibernate - ServiceStack 和 NHibernate 工作单元模式

c# - 流畅的nhibernate Cascade创建新记录而不是更新它们

asp.net - Nhibernate 使用大量内存