2012-06-08 53 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; 
相關問題