2

我对 NHibernate 比较陌生,想在一次调用中填充递归 Category -> Parent Category 关系,但我不想要整个 Category 对象(我只需要 Id 和 Name)。

我发现这个http://ayende.com/blog/4151/nhibernate-tips-tricks-efficiently-selecting-a-tree建议我应该使用JOIN FETCH. 但是,当我这样做时,我得到了错误:

fetch 不能与 scroll() 或 iterate() 一起使用

HQL如下:

SELECT c.CategoryId as CategoryId, c.Name as Name
FROM Category c JOIN FETCH c.ParentCategory

完整的代码是:

var query = session
            .CreateQuery(@"SELECT c.CategoryId as CategoryId, c.Name as Name, c.ParentCategory as ParentCategory
                            FROM Category c JOIN FETCH c.ParentCategory")
            .SetResultTransformer(new DistinctRootEntityResultTransformer())
            .Enumerable<Category>();

我也尝试将 c.ParentCategory 添加到选择中,但这没有帮助。

我哪里错了?我应该填充 ChildCategories 而不是 ParentCategory 吗?

4

1 回答 1

1

这仅仅是因为.Enumerable()你的陈述结束时的电话。

例外

 fetch may not be used with scroll() or iterate()

如果查询被视为浅查询,将被抛出。并且 Enumerable() 确实将查询置于“浅层状态”......

相反,使用.List()

于 2013-09-29T11:00:03.657 回答