我对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吗?
答案 0 :(得分:1)
这仅仅是因为你声明结尾处的.Enumerable()
电话。
例外
fetch may not be used with scroll() or iterate()
如果将查询视为浅层查询,则抛出此异常。 Enumerable()确实将查询置于“浅状态”......
相反,请使用.List()