Ho le seguenti due tabelle:NHibernate - Sinistra si unisce
Lavoro areaid, JobNo (chiave composita)
Logs LOGID, areaid, JobNo
ho bisogno di ottenere tutti i lavori a cui non sono associati registri. In SQL che potevo fare:
SELECT Jobs.AreaID,
Jobs.JobNo
FROM Jobs
LEFT JOIN Logs
ON Jobs.AreaID = Logs.AreaID
AND Jobs.JobNo = Logs.JobNo
WHERE Logs.LogID is null
Ma io non sono sicuro di come ottenere questo risultato con NHibernate. Qualcuno potrebbe offrire qualche suggerimento?
Qui sono le mie mappature:
<class name="Job" table="Jobs">
<composite-key name="Id">
<key-property name="JobNo"/>
<key-many-to-one name="Area" class="Area" column="AreaID"/>
</composite-key>
</class>
<class name="Log" table="Logs">
<id name="Id" column="LogID">
<generator class="identity"/>
</id>
<property name="JobNo"/>
<many-to-one name="Area" class="Area" column="AreaID"/>
</class>
Grazie
Aggiornamento
OK, ho modificato la risposta di Nosila un po ', e questo ora sta facendo quello che volevo:
Log logs = null;
return session.QueryOver<Job>()
.Left.JoinAlias(x => x.Logs,() => logs)
.Where(x => logs.Id == null)
.List<Job>();
Ho anche dovuto aggiungere questo al mio lavoro mapping:
<bag name="Logs">
<key>
<column name="JobNo"></column>
<column name="DivisionID"></column>
</key>
<one-to-many class="Log"/>
</bag>
Grazie per l'aiuto. :)
Puoi pubblicare la query che hai ora? – Nosila
La query SQL precedente è attualmente ciò che sto utilizzando. Sto solo imparando l'NH al momento e sto provando a convertire una piccola applicazione a usarla. – Tom
Hai creato i tuoi mapping? Inoltre, qualcuno mi correggerà se sbaglio, ma penso che tu abbia bisogno di NHibernate 3.2 per poter aggiungere condizioni al tuo join (usando comunque l'API 'QueryOver'). – Nosila