首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法解析属性: PropertyName of: NHibernate中的类错误

无法解析属性: PropertyName of: NHibernate中的类错误
EN

Stack Overflow用户
提问于 2012-06-08 13:52:11
回答 2查看 3.2K关注 0票数 3

我第一次使用NHibernate,在这一行中它为我抛出异常

代码语言:javascript
复制
var total = session
                    .QueryOver<Comment>().Where(p => p.Entry.Author == username)
                    .ToRowCountQuery()
                    .FutureValue<int>();

                var results = session
                    .QueryOver<Comment>().Where(p => p.Entry.Author == username)
                    .Fetch(x => x.Entry).Eager()
                    .OrderBy(x => x.Posted).Desc()
                    .Skip(skip)
                    .Take(take)
                    .List();

例外是

无法解析属性: Entry.Author of: FunnelWeb.Model.Comment

我想问题是Entry对象在这里没有加载。我怎么才能用Nhibernate来耍这个把戏呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-08 14:08:39

QueryOver只是标准的强类型包装器,不允许隐式深度引用。

你得用:

代码语言:javascript
复制
session.QueryOver<Comment>()
       .JoinQueryOver(x => x.Entry)
       .Where(x => x.Author == username)

或者您可以使用Query<> (LINQ),它将与您尝试过的语法一起工作。

票数 5
EN

Stack Overflow用户

发布于 2012-06-08 14:18:32

你需要JoinAlias或JoinQueryOver。下面有一个关于如何使用未来查询的例子.

代码语言:javascript
复制
Entry entryAlias = null;

var q = session.QueryOver<Comment>()
    .JoinAlias(x => x.Entry, () => entryAlias)
    .Where(() => entryAlias.Author == username);

var totalFuture = q.ToRowCountQuery().FutureValue<int>(); //ToRowcountQuery clones the query, we can reuse it for results

var resultsFuture = q
    //.Fetch(x => x.Entry).Eager() //already joined
    .OrderBy(x => x.Posted).Desc()
    .Skip(skip)
    .Take(take)
    .Future<Comment>();

var results = resultsFuture.ToList(); //both future queries are executed in the same batch 
var total = totalFuture.Value;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10950179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档