2012-07-26 36 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