2017-06-11 4 views
1

Ich habe das Internet gesucht und konnte keine befriedigende Antwort finden.NHibernate verbinden mehrere Tabellen

Ich versuche, eine QueryOver/CreateCriteria Abfrage zu erstellen, um ein Feld aus 1 Tabelle nach dem Verbinden von 3 Tabellen zu erhalten.

Die SQL-Abfrage selbst ist einfach, aber ich konnte das nicht in das obige Format konvertieren.

Die Abfrage:

select LOC_ID from 
VISITOR_VISIT vv 
join VISIT v on vv.VISIT_ID = v.VISIT_ID 
join VISITOR_LAY_ENTRY_POINTS vlep on vlep.VLEP_ID = v.VEP_ID 
where vv.VIS_ID = PARAMETER 
+0

Es würde helfen, mehr Kontext zu schaffen, oder Schemata der drei Tabellen, die Sie in dieser Abfrage haben. Zum Beispiel bin ich nicht sicher, aus welcher Tabelle 'LOC_ID' stammt. Sie können auch über Projektionen lesen, wenn Sie nur eine Spalte zurückgeben möchten. http://nhibernate.info/doc/nhibernate-reference/queryqueryover.html#queryqueryover-projections –

Antwort

1
// Join aliases for ease of getting access to all parts of the query 
VisitorVisit visitorVisitAlias = null; 
Visit visitAlias = null; 
VisitorLayEntryPoints = visitorLayEntryPointsAlias = null; 

IList<int> locationIds = 
    session.QueryOver<VisitorVisit>() 
    .JoinAlias(() => visitorVisitAlias.VisitId,() => visitAlias) 
    .JoinAlias(() => visitAlias.VepId,() => visitorLayEntryPointsAlias) 

    // Depends on where your LocId is 
    .Select(() => visitorVisit.LocId) 

    // I assumed your LocId is an int, switch to string if it's a string 
    .List<int>(); 

Natürlich sind alle funktioniert dies nur, wenn Sie die richtigen Assoziationen haben in Ihrem Mapping-Konfiguration (XML oder Fluent NHibernate) eingerichtet, das ist, wo Sie die beiden definieren sollten Bedingungen beitreten.

  1. Many-To-One (Object Reference): http://nhibernate.info/doc/nhibernate-reference/mapping.html#mapping-declaration-manytoone
  2. Many-to-Many-oder One-To-Many (Sammlung Referenz): http://nhibernate.info/doc/nhibernate-reference/collections.html#collections-ofvalues