Nhibernate SetCacheable引发IndexOutOfBoundsException

Nhibernate SetCacheable引发IndexOutOfBoundsException,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我在NHibernate中有以下查询,结果是DTO的列表,而不是实体: var result = query //.SetCacheable(true) .SetResultTransformer(new MyDTOTransformer()) .List<DTO>(); 有谁能帮助我,告诉我如何解决这个问题(或者即使NHibernate支持这个问题) 我目前正在使用NHibernate

我在NHibernate中有以下查询,结果是DTO的列表,而不是实体:

var result = query
                //.SetCacheable(true)
                .SetResultTransformer(new MyDTOTransformer())
                .List<DTO>();
有谁能帮助我,告诉我如何解决这个问题(或者即使NHibernate支持这个问题)

我目前正在使用NHibernate版本2.1.0.4000

谢谢,,
Jelle

我可能弄错了,但我认为查询缓存依赖于启用的二级缓存。老实说,我想知道如果在二级缓存中没有实体缓存,它是否会那么有用,因为它存储的所有内容都是与给定查询/参数组合相关联的ID列表(您仍然需要转到数据库以实际获取对象,在某些情况下,这可能会导致每个对象一个查询)


是我在nhibernate中看到的关于缓存的一篇更好的帖子,它似乎暗示到最后,您只能在二级缓存中缓存查询。我也有同样的例外,现在已经修复了。昨天,当我通过设置实体的
SetCacheable
使用第二个缓存时,出现了
IndexOutOfBoundsException

我在谷歌上搜索,发现一个博客提到这可能是我的客户实体的问题。我尝试了
query.setCacheable(true)
,并添加了
query.setCacheMode(CacheMode.GET)成功了!尝试一下这个解决方案。

我认为您只需要使用AddScalar“声明”从DTO返回的列。如果没有下面的AddScalar行(结果集中的每一列对应一行),则没有第二级缓存代码所需的列定义元数据(因此索引超出边界异常)

只需使用AddScalar列出所有返回的列,我敢打赌它一定能工作

var result = query
            //.SetCacheable(true)
            .AddScalar("yourfirstcolumn",NHibernateUtil.Int32)
            .AddScalar("yoursecondcolumn",NHibernateUtil.String)
            .SetResultTransformer(new MyDTOTransformer())
            .List<DTO>();
var result=query
//.SetCacheable(真)
.AddScalar(“您的第一列”,NHibernateUtil.Int32)
.AddScalar(“yoursecondcolumn”,NHibernateUtil.String)
.SetResultTransformer(新MyDTOTransformer())
.List();

您是否在配置中启用了查询缓存?我已将“使用查询缓存”设置为true(使用fluent nhibernate)。但我没有指定二级缓存提供程序。我只是想知道我的命名查询的结果是在会话期间缓存的。
var result = query
            //.SetCacheable(true)
            .AddScalar("yourfirstcolumn",NHibernateUtil.Int32)
            .AddScalar("yoursecondcolumn",NHibernateUtil.String)
            .SetResultTransformer(new MyDTOTransformer())
            .List<DTO>();