2012-07-26 10 views
5

Ich versuche, alle Sammlungen (nicht-kartesischen Produkt) einer übergeordneten Entität abrufen, aber nicht herausfinden, wie man die Enkelkinder bekommen. Tabellenstruktur wie folgt aussieht:NHibernate, erhalten Enkelkinder Sammlung mit QueryOver w/Future

enter image description here

Der folgende Code bekommt meine Eltern und seine Child1 und Child2 Sammlungen sowie seine ParentChild3 Sammlung, aber ich weiß nicht, wie die Abfrage strukturieren die Child3 Enkelkinder zu erhalten (und verschiebe sie auf 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(); 

Semi-verwandt: Ist dies der beste Weg, um alle Sammlungen zu bekommen? Ist es besser (und möglich), eine Abfrage zu verwenden, die das Ergebnis stattdessen mit Joins erhält?

Antwort

2

wie Kinder 3 erhalten:

ParentChildren alias = null; 
var parentChildren3 =_session 
    .QueryOver<Parent>() 
    .Where(x => x.Id == id) 
    .JoinAlias(x => x.ParentChildren3,() => alias) 
    .Fetch(() => alias.Children3).Eager 
    .Future<Parent>(); 

Halb bezogen werden: Es ist die beste Weise, die ich kenne.

Wenn die ParentChild-Tabelle keine zusätzlichen Spalten enthält, können Sie sie als Standard vieleTabellen zuordnen. NHibernate benötigt dann keine Entitäten für die Verknüpfungstabelle und das mühsame Abrufen wird einfacher.

+0

Leider muss ich es als Verbund Karte (und während dieser nicht Nutzlast Spalten enthält, andere tun), ich so kommt mit ManyToMany nicht durch. – heyseuss

Verwandte Themen