使用SqlQuery的NHibernate投影

使用SqlQuery的NHibernate投影,nhibernate,projection,sql,Nhibernate,Projection,Sql,我试图重现HqlQuery风格的“选择新ObjectTopProjectOut”功能。i、 e.获取从查询返回的列的列表,并将其作为ObjectTopProjectOut类型的列表返回,这些类型使用构造函数实例化,构造函数的参数与查询中的列相同 这实际上就是Hql中“选择新ObjectTopProjectOut”实现的功能。。。。但很明显,这在SqlQuery中不可用。我想我需要设置一个结果转换,并使用PassThroughResultTransformer、DistinctRootEntity

我试图重现HqlQuery风格的“选择新ObjectTopProjectOut”功能。i、 e.获取从查询返回的列的列表,并将其作为ObjectTopProjectOut类型的列表返回,这些类型使用构造函数实例化,构造函数的参数与查询中的列相同

这实际上就是Hql中“选择新ObjectTopProjectOut”实现的功能。。。。但很明显,这在SqlQuery中不可用。我想我需要设置一个结果转换,并使用PassThroughResultTransformer、DistinctRootEntityResultTransformer等使其工作


有人知道我应该用什么吗

您可以使用AddEntity方法从SQL查询中填充实体

以下是来自以下方面的两个示例:


好的。。。。看了NHibernate代码之后,我似乎在寻找
别名BeanConstructor或ResultTransformer
。。。。当然

但是我可能发现了一个nHibernate错误。如果从两个不同的表(比如market.name和account.name)返回了两次相同的列名,那么当nHibernate将数组从数据库返回到转换器时,“name”的第一个出现将用于这两个表。讨厌

解决方法是使用唯一别名。对于Hql,生成的sql具有严重的别名,因此这只是SqlQuery的一个缺陷


Grrrr。今天一定是我的日子,也发现了

不,对不起,它们不是实体,它们是投影。
sess.CreateSQLQuery("SELECT * FROM CATS")
    .AddEntity(typeof(Cat));

sess.CreateSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS")
    .AddEntity(typeof(Cat));