1

これを考慮して:

var pfs = Session.QueryOver<Pegfile>()
                .JoinAlias(pf => pf.Responses, () => responseAlias)
                .List();

続いてこれ

Debug.Print(pfs.First().Responses.Count.ToString());

そのデバッグ ステートメントによって NHibernate が戻って Response コレクションを再クエリするようになるのはなぜですか?最初のクエリで初期化されたのは確かですか?

4

2 に答える 2

3

Fetchコレクションをプリロードするには、次を使用する必要があります。

var pfs = Session.QueryOver<Pegfile>()
                .JoinAlias(pf => pf.Responses, () => responseAlias)
                .Fetch(pf => pf.Responses).Eager
                .List();

JoinAliaswhere句などで参照できるように、コレクションに別名を付けます。

QueryOver についてはよくわかりませんが、LINQ プロバイダーは、COUNT呼び出し時に SQL 集計クエリを発行するなど、コレクションが読み込まれない原因となるいくつかの最適化も使用していますCount

于 2013-04-24T13:33:36.527 に答える
0

毎回私を取得します、なぜ覚えていないのですか?結合は左利きでなければなりません- grr は NH を同じように愛し、憎みます。

var pfs = Session.QueryOver<Pegfile>()
                .Left.JoinAlias(pf => pf.Responses, () => responseAlias)
                .List();
于 2013-04-24T13:30:38.300 に答える