मुझे यह जानने की जरूरत है कि 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 - Part 2: एंड्रयू व्हिटकर द्वारा मूल बातें और जुड़ाव बहुत अच्छी व्याख्या देता है:
सारांश:
IQueryOver
दो प्रकार के मापदंडों के साथ एक सामान्य प्रकार हैTRoot
औरTSubType
.Select
TRoot
अन्य QueryOver विधियों पर काम करते हुए चल रही हैTSubType
।TRoot
TSubType
जब आप क्वेरी का निर्माण कर रहे होते हैं तो वही रहता है, लेकिन जब आप उपयोग करते हैं तो बदल जाते हैंJoinQueryOver
JoinQueryOver
औरJoinAlias
अपनी क्वेरी में शामिल हों।JoinAlias
नहीं बदलता हैTSubType
, लेकिनJoinQueryOver
करता है।- आप गुण है कि से संबंधित नहीं करने का उल्लेख करने के लिए जब एक प्रश्न के निर्माण उपनाम का उपयोग कर सकते
TRoot
याTSubType
Kitten kittenAlias = null;
औरCat catAlias = null;
पहले घोषित करना होगा । मुझे यह गन्दा लगता है, इसलिए मैंJoinAlias
तब तक उपयोग नहीं करता जब तक यह आवश्यक न हो।