1

我试图理解为什么这个简单的查询会在 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.FIELD”异常。

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

谢谢!

4

2 回答 2

0

仅供参考,如果其他人因此而被烧毁。

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

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

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

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

于 2013-09-26T11:33:20.160 回答
0

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

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

var query = session.CreateQuery(@"select count(*) as co
                              from Parent p
                                   inner join fetch p.Child c
                              where c.Field = 'someValue'");
于 2013-03-21T15:41:01.633 回答