我试图理解为什么这个简单的查询在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无法绑定”异常。
任何人都知道为什么会出现这个问题以及如何解决这个问题?
谢谢!
答案 0 :(得分:0)
为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'");
答案 1 :(得分:0)
仅供参考,如果其他人被此烧伤。
似乎NHibernate的内部在生成查询时过滤掉了连接。
因此,我们找到的唯一解决方案是以这种方式重新编写查询:
select count(*) as C
from Parent p
where p.Child.Field = 'someValue'
这样,NHibernate将生成连接语法(使用交叉连接运算符和where子句)。