ฉันจะเลือก / ค่าโครงการจากแบบสอบถามย่อยจากตารางอื่นลงในแบบสอบถามหลักของฉันได้อย่างไร
ฉันมีโมเดล NH เช่นนี้:
[Serializable]
public class MyModel
{
public virtual int Id {get; set;}
//more mapped values
....
//unmapped values
public virtual string ValueFromOtherTable {get;set;}
}
และฉันต้องการเติม ValueFromOtherTable ด้วยการรวมด้านซ้ายดังนี้:
Select mt.*, ..., ot.ValueFromOtherTable from MyModelTable mt left
join OtherTable ot ON (somecondition)
โดยที่ MyModelTable เป็นตารางที่แมปกับคลาส MyModel ฉันต้องการเติม ValueFromOtherTable (ไม่มีการแมป NH) โดยการเลือกค่าทั้งหมดจาก mt (เพื่อเติมคอลัมน์ที่แมป NH) จากนั้นโดยใช้ OtherTable ฉันต้องการเติม ValueFromOtherTable
ฉันไม่สามารถเข้าร่วมทั้งสองตารางผ่าน QueryOver
ได้ เนื่องจากไม่มีความสัมพันธ์ระหว่างพ่อแม่และลูกโดยตรงในโมเดล ดังนั้น JoinAlias
หรือ JoinQueryOver
จะไม่ทำงาน MainQueryOver
คำถามของฉัน MyModelTable
ทางเลือก:
ทางเลือกอื่นคือรับค่าทั้งหมดจาก MyModelTable ก่อน จากนั้นจึงใช้คุณสมบัติที่นั่นเพื่อสืบค้น OtherTable อย่างไรก็ตาม สิ่งนี้จะส่งผลให้เกิดปัญหา SELECT N+1
(สำหรับแต่ละรุ่นจาก MyModel
ให้เลือก OtherTable...) และยังทำให้โค้ดซับซ้อนมากด้วย
มีวิธีที่ดีในการแก้ไขปัญหานี้หรือเป็นวิธีเดียวที่จะเติม MyModel โดยใช้ทางเลือกอื่นที่อธิบายไว้หรือไม่