次の(簡略化された)エンティティの階層があります。
RootClass
->DescriptorClass
->SomeChild->DescriptorClass
->SomeGrandChild
可能であれば、1 回のクエリですべてを取得したいと考えています。
現在、私は以下を持っています:
Session.Query<RootClass>().Where(/*some expressions here*/)
.Fetch(v => v.DescriptorClass)
.Fetch(v => v.SomeChild).ThenFetch(v => v.SomeGrandChild)
.Fetch(v => v.SomeChild).ThenFetch(v => v.DescriptorClass);
正常に動作しますが、SomeChild で 2 つの結合を持つ SQL クエリが作成されます。明らかに、その 2 番目の Fetch(v => v.SomeChild) を取り除く必要がありますが、その方法が見つかりません。私は試した:
Session.Query<RootClass>().Where(/*some expressions here*/)
.Fetch(v => v.DescriptorClass)
.Fetch(v => v.SomeChild).ThenFetch(v => v.SomeGrandChild)
.ThenFetch(v => v.DescriptorClass); //<- wrong, tries to find DescriptorClass on SomeGranchild
と
Session.Query<RootClass>().Where(/*some expressions here*/)
.Fetch(v => v.DescriptorClass)
.Fetch(v => v.SomeChild).ThenFetch(v => v.SomeGrandChild)
.Fetch(v => v.DescriptorClass); //<- wrong, loads the same DescriptorClass of RootClass, not on SomeChild
NHibernate に SomeChild で単一の結合を作成し、SomeChild の SomeGrandChild と DescriptorClass をフェッチするように指示するにはどうすればよいですか?