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