2011-10-21 23 views
5

Tôi là một thực thể được liên kết với <many-to-one> và pháp nhân đó có hai số <many-to-one> mà tôi muốn tìm nạp cùng một lúc. Tôi có thể đạt được điều này bằng cách truy vấn này:Tìm nạp nhiều trong ThenFetch

var tshead = session.Query<MainEntity>() 
       .Fetch(r=>r.FirstAssoc).ThenFetch(p=>p.Other) 
       .Fetch(r=>r.FirstAssoc).ThenFetch(p=>p.Another) 
       .Take(10) 
       .ToList(); 

Như bạn có thể thấy tôi đã phải viết hai lần .Fetch(r=>r.FirstAssoc) tôi chắc chắn rằng tôi có thể tránh điều này, nhưng tôi không thể tìm ra cách. Bất kỳ ý tưởng ?

Cảm ơn!

+1

Tôi không nghĩ rằng bạn có thể tránh nó, trừ khi 'Fetch (r => r.FirstAssoc.Another)' hoạt động, mà tôi nghi ngờ. –

+0

@Diego cảm ơn, nghi ngờ của bạn được xác nhận (biểu hiện quá phức tạp ngoại lệ). Nhưng nó sẽ là tốt đẹp để có. –

+0

Tôi có cùng một vấn đề chính xác, mặc dù FirstAssoc của tôi là một bộ sưu tập vì vậy nó là FetchMany.ThenFetch.FetchMany.ThenFetch. Rất thích một giải pháp cho điều này. – mikeschuld

Trả lời

3

Nếu bạn chọn một 'MainEntity' cụ thể thì bạn có thể làm điều đó bằng QueryOver như vậy:

FirstAssoc firstAssoc = null; 
Other other = null; 
Another another = null; 

tshead = session.QueryOver<MainEntity>() 
       .Where(x => x.Id == id) 
       .JoinAlias(x => x.FirstAssoc,() => firstAssoc) 
       .JoinAlias(() => firstAssoc.Other,() => other) 
       .JoinAlias(() => firstAssoc.Another,() => another) 
       .SingleOrDefault(); 

Tôi đã viết về nó ở đây:

http://www.philliphaydon.com/2011/04/nhibernate-querying-relationships-are-depth/

Bạn không thể làm:

One-Many-Many

chỉ One-Many-One.

Tôi không chắc chắn bạn có thể làm Nhiều người Nhiều, việc chuyển đổi sẽ quá khó khăn.

+0

@Diego - CC bạn vì bạn có thể quan tâm. – Phill

+0

+1, nhưng bạn đang sử dụng QueryOver, chúng ta có thể đạt được điều tương tự với linqtonh không? PS blog của bạn thực sự thú vị :) –

+0

@Felice - Không chắc chắn nếu bạn có thể làm điều đó với truy vấn , tôi nghi ngờ nó là không thể, nhưng tôi sẽ có một vở kịch cuối tuần này xem như thế nào đến nay tôi có thể nhận được. Bất kỳ lý do nào bạn không thể sử dụng QueryOver? Cảm ơn bạn đã bình luận về blog của tôi :) được đánh giá cao. – Phill

Các vấn đề liên quan