我正在尝试检索父实体的所有集合(非笛卡儿产品),但无法弄清楚如何获取孙子。表结构如下:
以下代码获取我的父级及其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();
半相关:这是获得所有收藏品的最佳方式吗?是否更好(并且可能)使用通过连接获得结果的查询?
答案 0 :(得分:2)
如何获得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>();
半相关:这是我所知道的最佳方式。
如果ParentChild表没有其他列,那么您可以将其映射为标准manytomany。 NHibernate当时不需要实体用于链接表,并且更加容易获取。
答案 1 :(得分:2)
试试这个:
var parentChildren3 =
_session
.QueryOver<Parent>()
.Fetch(x => x.ParentChildren3).Eager
.Fetch(x => x.ParentChildren3.First().Child3).Eager
.Where(x => x.Id == id)
.Future<Parent>();
正如论坛帖子所述:https://groups.google.com/forum/?fromgroups=#!topic/nhusers/ER5BvVnCT5Q