2012-07-26 58 views
5

我试图检索父实体的所有集合(非笛卡尔产品),但无法弄清楚如何获得孙子们。表结构如下:NHibernate,使用QueryOver获取孙子集合w /未来

enter image description here

以下代码获取我的父母和其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(); 

半关联:这是获得所有集合的最佳方式吗?是否更好(可能)使用查询来获得结果而不是结果?

回答

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表没有额外的列,那么你可以将它映射为标准许多东西。 NHibernate将不需要链接表的实体,那么渴望获取会更容易。

+0

不幸的是我必须将它映射为复合(虽然这一个没有有效载荷列,别人做的),所以我ManyToMany无法脱身。 – heyseuss 2012-07-27 12:17:42