ฉันต้องการทราบว่า JoinQueryOver และ JoinAlias แตกต่างกันอย่างไรและควรใช้เมื่อใด
ฉันต้องการทราบว่า JoinQueryOver และ JoinAlias แตกต่างกันอย่างไรและควรใช้เมื่อใด
คำตอบ:
พวกเขาทำสิ่งเดียวกันตามหน้าที่สร้างการเข้าร่วมกับเอนทิตีอื่น ความแตกต่างเพียงอย่างเดียวคือสิ่งที่พวกเขากลับมา JoinQueryOver ส่งคืน QueryOver ใหม่โดยมีเอนทิตีปัจจุบันเป็นเอนทิตีที่เข้าร่วมในขณะที่ JoinAlias ส่งคืน QueryOver เดิมที่มีเอนทิตีปัจจุบันเป็นเอนทิตีหลักดั้งเดิม
ไม่ว่าคุณจะใช้อันไหนเป็นเรื่องของรสนิยมส่วนตัว: (จากhttp://nhibernate.info/doc/nh/en/index.html#queryqueryover )
IQueryOver<Cat,Kitten> catQuery =
session.QueryOver<Cat>()
.JoinQueryOver<Kitten>(c => c.Kittens)
.Where(k => k.Name == "Tiddles");
และ
Cat catAlias = null;
Kitten kittenAlias = null;
IQueryOver<Cat,Cat> catQuery =
session.QueryOver<Cat>(() => catAlias)
.JoinAlias(() => catAlias.Kittens, () => kittenAlias)
.Where(() => kittenAlias.Name == "Tiddles");
มีหน้าที่เหมือนกัน สังเกตว่าลูกแมวเลียสถูกอ้างอิงอย่างชัดแจ้งในคำค้นหาที่สองอย่างไร
QueryOver Series - ตอนที่ 2: พื้นฐานและการเข้าร่วมโดย Andrew Whitakerให้คำอธิบายที่ดีมาก:
สรุป:
IQueryOver
เป็นประเภททั่วไปที่มีพารามิเตอร์สองประเภทTRoot
และTSubType
.Select
ดำเนินการในTRoot
ขณะที่วิธี QueryOver อื่น ๆTSubType
ที่ดำเนินการเกี่ยวกับTRoot
จะยังคงเหมือนกับที่คุณสร้างแบบสอบถาม แต่TSubType
จะเปลี่ยนแปลงเมื่อคุณเข้าร่วมโดยใช้JoinQueryOver
JoinQueryOver
และJoinAlias
เพิ่มการรวมในแบบสอบถามของคุณJoinAlias
ไม่เปลี่ยนแปลงTSubType
แต่JoinQueryOver
ทำ- คุณสามารถใช้นามแฝงเมื่อสร้างแบบสอบถามเพื่ออ้างถึงคุณสมบัติที่ไม่ได้เป็นของ
TRoot
หรือTSubType
Kitten kittenAlias = null;
และCat catAlias = null;
ก่อนหน้านี้ ฉันคิดว่ามันยุ่งฉันจึงไม่ใช้JoinAlias
ถ้ามันไม่จำเป็น