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に個別の親オブジェクトのみを含めることは可能ですか?
どうもありがとう。