使用SqlQuery的NHibernate投影
我试图重现HqlQuery风格的“选择新ObjectTopProjectOut”功能。i、 e.获取从查询返回的列的列表,并将其作为ObjectTopProjectOut类型的列表返回,这些类型使用构造函数实例化,构造函数的参数与查询中的列相同 这实际上就是Hql中“选择新ObjectTopProjectOut”实现的功能。。。。但很明显,这在SqlQuery中不可用。我想我需要设置一个结果转换,并使用PassThroughResultTransformer、DistinctRootEntityResultTransformer等使其工作使用SqlQuery的NHibernate投影,nhibernate,projection,sql,Nhibernate,Projection,Sql,我试图重现HqlQuery风格的“选择新ObjectTopProjectOut”功能。i、 e.获取从查询返回的列的列表,并将其作为ObjectTopProjectOut类型的列表返回,这些类型使用构造函数实例化,构造函数的参数与查询中的列相同 这实际上就是Hql中“选择新ObjectTopProjectOut”实现的功能。。。。但很明显,这在SqlQuery中不可用。我想我需要设置一个结果转换,并使用PassThroughResultTransformer、DistinctRootEntity
有人知道我应该用什么吗 您可以使用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));