Tôi có hai bảng sau:NHibernate - Left tham gia
Jobs AreaID, JobNo (key composite)
Logs LogID, AreaID, JobNo
tôi cần để có được tất cả các việc làm không có bất kỳ nhật ký nào được liên kết với chúng. Trong SQL tôi có thể làm:
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
Nhưng tôi không chắc chắn làm thế nào để thực hiện điều này với NHibernate. Bất cứ ai có thể cung cấp bất kỳ con trỏ?
Dưới đây là ánh xạ của tôi:
<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>
Cảm ơn
Cập nhật
OK, tôi sửa đổi Nosila của câu trả lời hơi, và điều này đang làm những gì tôi muốn:
Log logs = null;
return session.QueryOver<Job>()
.Left.JoinAlias(x => x.Logs,() => logs)
.Where(x => logs.Id == null)
.List<Job>();
Tôi cũng phải thêm công việc này vào công việc của mình ánh xạ:
<bag name="Logs">
<key>
<column name="JobNo"></column>
<column name="DivisionID"></column>
</key>
<one-to-many class="Log"/>
</bag>
Cảm ơn sự giúp đỡ. :)
Bạn có thể đăng truy vấn bạn có ngay bây giờ không? – Nosila
Truy vấn SQL ở trên hiện đang là những gì tôi đang sử dụng. Tôi chỉ đang học NH vào lúc này và đang cố gắng chuyển đổi một ứng dụng nhỏ sang sử dụng nó. – Tom
Bạn đã tạo bản đồ chưa? Ngoài ra, ai đó sửa tôi nếu tôi sai nhưng tôi nghĩ rằng bạn cần NHibernate 3.2 để thêm điều kiện để tham gia của bạn (sử dụng API 'QueryOver', anyways). – Nosila