NHibernate查询失败,在聚合查询中“无法绑定多部分标识符”

时间:2013-03-21 15:39:08

标签: nhibernate

我试图理解为什么这个简单的查询在NHibernate 3.3上生成了错误的SQL:

var query = session.CreateQuery(@"select count(*) as C
                                  from Parent p
                                       inner join fetch p.Child c
                                  where c.Field = 'someValue'");

当我执行此查询时,生成的SQL不包含对Child表的引用,这会导致可怕的“多部分标识符_child.FIELD无法绑定”异常。

任何人都知道为什么会出现这个问题以及如何解决这个问题?

谢谢!

2 个答案:

答案 0 :(得分:0)

count(*)分配不同的别名,因为您使用cC作为别名,nhibernate可能会感到困惑。

例如,您可以像这样设置查询

var query = session.CreateQuery(@"select count(*) as co
                              from Parent p
                                   inner join fetch p.Child c
                              where c.Field = 'someValue'");

答案 1 :(得分:0)

仅供参考,如果其他人被此烧伤。

似乎NHibernate的内部在生成查询时过滤掉了连接。

因此,我们找到的唯一解决方案是以这种方式重新编写查询:

select count(*) as C
from Parent p
where p.Child.Field = 'someValue'

这样,NHibernate将生成连接语法(使用交叉连接运算符和where子句)。

相关问题