我有以下兩個表:NHibernate的 - 左加入
喬布斯 areaID表示,JobNo(複合鍵)
日誌 LOGID,areaID表示,JobNo
我需要得到所有作業沒有任何與他們關聯的日誌。在SQL我可以這樣做:
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
但我不知道如何使用NHibernate完成此操作。任何人都可以提供任何指針?
這裏是我的映射:
<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>
感謝
更新
OK,我修改Nosila的輕微的答案,這是現在在做什麼,我想:
Log logs = null;
return session.QueryOver<Job>()
.Left.JoinAlias(x => x.Logs,() => logs)
.Where(x => logs.Id == null)
.List<Job>();
我也不得不將這添加到我的工作中映射:
<bag name="Logs">
<key>
<column name="JobNo"></column>
<column name="DivisionID"></column>
</key>
<one-to-many class="Log"/>
</bag>
感謝您的幫助。 :)
你可以發佈你現在查詢? – Nosila 2012-02-15 12:40:12
上面的SQL查詢是我正在使用的。我現在剛學習NH,並試圖將小應用程序轉換爲使用它。 – Tom 2012-02-15 12:48:20
你有你的映射創建?另外,有人糾正我,如果我錯了,但我認爲你需要NHibernate 3.2爲你的連接添加條件(無論如何使用'QueryOver' API)。 – Nosila 2012-02-15 12:52:14