使用NHibernate构建层次结构时出错 - fetch不能与scroll()或iterate()一起使用

时间:2013-09-29 10:03:27

标签: c# nhibernate

我对NHibernate比较陌生,想填充一个递归类别 - >单个调用中的父类别关系,但我不想要整个Category对象(我只需要Id和名称)。

我发现这个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添加到select中,但这没有帮助。

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

1 个答案:

答案 0 :(得分:1)

这仅仅是因为你声明结尾处的.Enumerable()电话。

例外

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

如果将查询视为浅层查询,则抛出此异常。 Enumerable()确实将查询置于“浅状态”......

相反,请使用.List()