我正在尝试检索父实体的所有集合(非笛卡儿产品),但无法弄清楚如何获得孙子.表结构如下:

下面的代码获取了我的父代及其Child1和Child2集合,以及它的ParentChild3集合,但我不知道如何构造查询以获取Child3孙子(并将它们推迟到Future()).
var parent = _session
.QueryOver<Parent>()
.Where(x => x.Id == id)
.Future<User>();
var children1 =_session
.QueryOver<Parent>()
.Where(x => x.Id == id)
.Fetch(x => x.Children1).Eager
.Future<Parent>();
var children2 =_session
.QueryOver<Parent>()
.Where(x => x.Id == id)
.Fetch(x => x.Children2).Eager
.Future<Parent>();
var parentChildren3 =_session
.QueryOver<Parent>()
.Where(x => x.Id == id)
.Fetch(x => x.ParentChildren3).Eager
.Future<Parent>();
// how to get children3, now?
return parent.SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)
半相关:这是获得所有收藏品的最佳方式吗?是否更好(并且可能)使用通过连接获得结果的查询?
如何获得Children3:
ParentChildren alias = null;
var parentChildren3 =_session
.QueryOver<Parent>()
.Where(x => x.Id == id)
.JoinAlias(x => x.ParentChildren3, () => alias)
.Fetch(() => alias.Children3).Eager
.Future<Parent>();
Run Code Online (Sandbox Code Playgroud)
半相关:这是我所知道的最好的方法。
如果 ParentChild 表没有附加列,那么您可以将其映射为标准多对多。NHibernate 将不需要链接表的实体,并且急切的获取会更容易。