5

親エンティティのすべてのコレクション (非デカルト積) を取得しようとしていますが、孫を取得する方法がわかりません。テーブル構造は次のようになります。

ここに画像の説明を入力

次のコードは、私の親とその Child1 および Child2 コレクション、およびその ParentChild3 コレクションを取得しますが、Child3 の孫を取得する (そしてそれらを Future() に延期する) クエリを構成する方法がわかりません。

var parent = _session
    .QueryOver<Parent>()
    .Where(x => x.Id == id)
    .Future<User>();

var children1 =_session
    .QueryOver<Parent>()
    .Where(x => x.Id == id)
    .Fetch(x => x.Children1).Eager
    .Future<Parent>();

var children2 =_session
    .QueryOver<Parent>()
    .Where(x => x.Id == id)
    .Fetch(x => x.Children2).Eager
    .Future<Parent>();

var parentChildren3 =_session
    .QueryOver<Parent>()
    .Where(x => x.Id == id)
    .Fetch(x => x.ParentChildren3).Eager
    .Future<Parent>();

// how to get children3, now?

return parent.SingleOrDefault();

準関連: これはすべてのコレクションを取得するための最良の方法ですか? 代わりに結合で結果を取得するクエリを使用する方が良いですか (そして可能ですか)?

4

2 に答える 2

3

Children3 の入手方法:

ParentChildren alias = null;
var parentChildren3 =_session
    .QueryOver<Parent>()
    .Where(x => x.Id == id)
    .JoinAlias(x => x.ParentChildren3, () => alias)
    .Fetch(() => alias.Children3).Eager
    .Future<Parent>();

準関連:それは私が知っている最良の方法です。

ParentChild テーブルに追加の列がない場合は、標準の manytomany としてマップできます。その場合、NHibernate はリンク テーブルのエンティティを必要とせず、熱心なフェッチがより簡単になります。

于 2012-07-27T06:32:43.677 に答える
2

これを試して:

var parentChildren3 =
        _session
            .QueryOver<Parent>()
            .Fetch(x => x.ParentChildren3).Eager
            .Fetch(x => x.ParentChildren3.First().Child3).Eager
            .Where(x => x.Id == id)
            .Future<Parent>();

このフォーラム スレッドで説明されているように: https://groups.google.com/forum/?fromgroups=#!topic/nhusers/ER5BvVnCT5Q

于 2013-05-09T20:31:15.737 に答える