NHibernate查询失败,返回“0”;无法绑定多部分标识符";关于聚合查询

NHibernate查询失败,返回“0”;无法绑定多部分标识符";关于聚合查询,nhibernate,Nhibernate,我试图理解为什么这个简单的查询会在NHibernate 3.3上生成错误的SQL: var query = session.CreateQuery(@"select count(*) as C from Parent p inner join fetch p.Child c where

我试图理解为什么这个简单的查询会在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不包含对子表的引用,这导致可怕的“多部分标识符\u Child.FIELD无法绑定”异常

有人知道为什么会出现这个问题以及如何解决它吗


谢谢

count(*)
指定一个不同的别名,可能因为您使用
c
c
作为别名,nhibernate会感到困惑

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

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

仅供参考,如果有人被这烧死了

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

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

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

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

不幸的是,这不是问题所在。生成的sql是这样的:“选择COUNT(*)作为C FROM PARENT _PARENT,其中_CHILD.NAME='Some Value'”——这显然是错误的。@A.Chiesa:query看起来很简单。您是否仅为了测试目的而尝试将
count(*)删除为C
?只是为了检查错误是否持续存在。具有完全相同的from和where子句的select可以完美地工作。谢谢你的关注@Chiesa:很抱歉坚持,但是你已经尝试更改了
计数
别名,对吗?正如我告诉你的,查询似乎很容易隐藏很多东西。很抱歉,如果我没有指定它,但是是的,我更改了别名。我的真实世界查询比这更复杂,但这是一个简单的查询来突出问题。您可以自己验证:如果您有一个没有GROUPBY子句的聚合,NH显然不会在from子句中生成联接。