ele*_*eep 6 c# nhibernate fluent-nhibernate appfabric nhibernate-caches
我一直在尝试使用流畅的nhibernate 1.2和NHibernate 3.1升级到FNH 1.3和NH 3.2的项目,这一切似乎都有效,除了现在我在.List()命令上获得异常.
异常类型和消息是...... NHibernate.Exceptions.GenericADOException无法执行find [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();
Run Code Online (Sandbox Code Playgroud)
以下是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>
Run Code Online (Sandbox Code Playgroud)
在NH 3.2源代码中,以下行是抛出异常的地方......
if (nonCacheable != null && nonCacheable[i])
Run Code Online (Sandbox Code Playgroud)
和调用堆栈......
> 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>()
Run Code Online (Sandbox Code Playgroud)
所以任何帮助将不胜感激,如果您想了解更多信息,请告诉我,谢谢.
在互联网(又名谷歌)上搜索之后发现了这个......
https://nhibernate.jira.com/browse/NH-2961
事实证明这是 NH 3.2 中的一个已知错误,我想我会在这里发布以防其他人遇到这个问题。
归档时间: |
|
查看次数: |
3049 次 |
最近记录: |