3

初めて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();

例外は

プロパティを解決できませんでした: Entry.Author of: FunnelWeb.Model.Comment

Entry問題は、オブジェクトがここにロードされていないことだと思います。Nhibernateでそのトリックを行うにはどうすればよいですか?

4

2 に答える 2

5

QueryOver は Criteria の厳密に型指定されたラッパーに過ぎず、暗黙的な深い参照を許可しません。

以下を使用する必要があります。

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

または、Query<>代わりに (LINQ) を使用できます。これは、試した構文で動作します。

于 2012-06-08T14:08:39.093 に答える
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;
于 2012-06-08T14:18:32.110 に答える