5

NHibernateが小さな階層のデータを読み込もうとして問題が発生しました。私のドメインモデルは次のようになります。

class GrandParent
{
    int ID{get;set;}
    IList<Parent> Parents {get; set;}
}

class Parent
{
    IList<Child> Children {get; set;}
}

class Child
{
}

そして、私は与えられた祖父母のためにすべての親と子供を熱心にロードしたいと思います。このLinq-to-NHクエリは、正しいSQLを作成し、GrandParentを期待どおりにロードします(この例では、祖父母に2つの親があり、それぞれに2つの子オブジェクトがあると想定しています。つまり、合計4つの子オブジェクトです)。

var linq = session.Linq<GrandParent>();
linq.Expand("Parents");
linq.Expand("Parents.Children");
linq.QueryOptions.RegisterCustomAction(c => 
    c.SetResultTransformer(new DistinctRootEntityResultTransformer()));
var grandparent = (select g from session.Linq<GrandParent>()
                   where g.ID == 1
                   select g).ToList();

Assert(grandparent.Count == 1); //Works
Assert(grandparent.Parents.Count == 2); //Fails - count = 4!

grandparent.Parentsコレクションには4つのアイテムが含まれており、そのうち2つは重複しています。DistinctRootEntityResultTransformerは1レベルの深さのコレクションでのみ機能するようです。したがって、Parentsコレクションは、各親が持つ子オブジェクトの数に応じて複製されます。

NHに個別の親オブジェクトのみを含めることは可能ですか?

どうもありがとう。

4

1 に答える 1

1

マッピングがFetchType.Joinに設定されている場合は、FetchType.Selectに変更してみてください。

于 2009-09-08T20:47:30.953 に答える