質問

私はNHibernateは、データの小さな階層をロードしようとして問題を持っています。私のドメインモデルは次のようになります:

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

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

class Child
{
}

と私は与えられた祖父母のために熱心な負荷にすべての親と子供をしたいと思います。このLINQのツーNHクエリが正しいSQLを作成し、期待通りに祖父母をロードします(例では、祖父母が各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コレクションは重複している2れた4つの項目を含んでいます。 DistinctRootEntityResultTransformerのみ1つのレベルの深さのコレクションに取り組んでいますようなので両親のコレクションは、多くの子供がそれぞれの親オブジェクト方法に応じて複製されています。

それはNHのみ明確な親オブジェクトが含まれるように取得することはできますか?

どうもありがとうございました。

役に立ちましたか?

解決

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top