NHibernateで小さな階層のデータをロードしようとすると問題が発生しました。私のドメインモデルは次のようになります。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つの親があると仮定しています。
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コレクションには、2つのアイテムが重複しています。 DistinctRootEntityResultTransformerはコレクションのレベルが1レベルしかないので、各親が持つChildオブジェクトの数に応じてParentsコレクションが複製されるようです。
NHに個別のParentオブジェクトのみを含めることは可能ですか?
ありがとうございました。
これを解決できましたか?それは本当に迷惑です。 –
はい - ILolist for ICollectionを変更し、マッピングで 'set'を使用する方法については、下記のコメントを参照してください。 – Simon