我有以下(简化的)实体层次结构:
RootClass
->DescriptorClass
->SomeChild->DescriptorClass
->SomeGrandChild
如果可能的话,我想在一个查询中获取所有内容。
目前我有以下内容:
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 上创建了一个带有两个连接的 SQL 查询。显然,我必须摆脱第二个 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 上创建单个连接,然后获取 SomeGrandChild 和 SomeChild 的 DescriptorClass?