无法解析属性: 属性名称: NHibernate 中的类错误

本文关键字:属性 错误 NHibernate | 更新日期: 2023-09-27 18:36:46

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

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();

例外情况是

无法解析属性:条目。作者:FunnelWeb.Model.Comment

我想,问题是Entry对象没有加载到这里。我怎样才能用Nhibernate做这个把戏?

无法解析属性: 属性名称: NHibernate 中的类错误

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

您必须使用:

session.QueryOver<Comment>()
       .JoinQueryOver(x => x.Entry)
       .Where(x => x.Author == username)

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

你需要

加入别名或JoinQueryOver。我在下面有一个关于如何使用未来查询的示例......

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;