2012-06-08 49 views
3
我使用NHibernate的第一次

,并在此行中,它抛出异常,我无法解析属性:的属性名:类错误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做这个技巧?

+2

你能发布hbm(或其他映射)吗? –

回答

5

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

你不得不使用:

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

或者你可以使用Query<>代替(LINQ),它会与你已经尝试了语法工作。

2

你需要JoinAlias或JoinQueryOver。我有一个关于如何使用Future查询的例子...

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; 
相关问题