2012-01-02 11 views
5

ऑर्चर्ड में, मॉड्यूल डेवलपर कैसे सीख सकता है कि कैसे "जुड़ता है" काम, विशेष रूप से कोर पार्ट्स और रिकॉर्ड्स में शामिल होने पर? मैंने देखा है कि बेहतर मदद में से एक Orchard documentation में था, लेकिन इनमें से कोई भी उदाहरण मौजूदा या कोर भागों के साथ संबंध बनाने का तरीका दिखाता है। कुछ मैं तलाश कर रहा हूँ का एक उदाहरण के रूप में, यहाँ एक काम उदाहरण से लिया मॉड्यूल सेवा कोड का एक टुकड़ा है:ऑर्चर्ड को समझना और डेटा संबंध

_contentManager 
    .Query<TaxonomyPart>() 
    .Join<RoutePartRecord>() 
    .Where(r => r.Title == name) 
    .List() 

इस मामले में, एक कस्टम TaxonomyPart एक कोर RoutePartRecord साथ शामिल हो रहा है। मैंने कोड की जांच की है, और मैं नहीं देख सकता कि कैसे टैक्सोनोमीपार्ट रूटपार्ट रिकार्ड में "जुड़ने योग्य" है।

List<string> tags = new List<string> { "hello", "there" }; 
IContentQuery<TagsPart, TagsPartRecord> query = _cms.Query<TagsPart, TagsPartRecord>(); 
query.Where(tpr => tpr.Tags.Any(t => tags.Contains(t.TagRecord.TagName))); 
IEnumerable<TagsPart> parts = 
    query.Join<CommonPartRecord>() 
    .Where(cpr => cpr.Id != currentItemId) 
    .OrderByDescending(cpr => cpr.PublishedUtc) 
    .Slice(part.MaxItems); 

मैंने सोचा कि मैं कैसे अपने ही क्वेरी के लिए फार्म की पूर्व उदाहरणों में से एक से सीख सकते हैं: इसी तरह, कोड काम करने से, यहाँ एक और टुकड़ा चालक कोड है जो एक कोर CommonPartRecord के साथ एक कस्टम TagsPart संबंधित है। मैं इस किया था:

List<string> tags = new List<string> { "hello", "there" }; 
IContentQuery<TagsPart, TagsPartRecord> query = _cms.Query<TagsPart, TagsPartRecord>(); 
query.Where(tpr => tpr.Tags.Any(t => tags.Contains(t.TagRecord.TagName))); 
var stuff = 
    query.Join<ContainerPartRecord>() 
    .Where(ctrPartRecord => ctrPartRecord.ContentItemRecord.ContentType.Name == "Primary") 
    .List(); 

मेरी कोड के इरादे एक विशेष कंटेनर (या ब्लॉग) का केवल उन लोगों के लिए पाया सामग्री आइटम सीमित करने के लिए है। जब कोड चला गया, तो उसने {"could not resolve property: ContentType of: Orchard.Core.Containers.Models.ContainerPartRecord"} कहकर मेरी जॉइन पूछताछ पर एक अपवाद फेंक दिया।

  1. क्यों ड्राइवर का प्रदर्शन में() दूसरे उदाहरण की विधि CommonPartRecord आबादी है, लेकिन नहीं ContainerPartRecord है: इस सवाल की एक किस्म की ओर जाता है? आम तौर पर मुझे कैसे पता चलेगा कि कौन से भाग रिकॉर्ड आबादी वाले हैं, और कब?
  2. कार्य कोड स्निपेट में, कोई भी कुंजी/शर्त निर्दिष्ट नहीं होने के बाद से काम करने में वास्तव में कैसे शामिल है (और कोई अंतर्निहित जॉइन कुंजी स्पष्ट नहीं है)? उदाहरण के लिए, मैंने डेटा माइग्रेशन फ़ाइल और models कक्षाओं की जांच की, और टैगपार्ट और कॉमनपार्ट रिकार्ड के बीच कोई अंतर्निहित संबंध नहीं मिला। इस प्रकार, उस नमूना कोड को देखने के अलावा, किसी को भी पहले स्थान पर कैसे जाना होगा कि इस तरह के शामिल कानूनी या संभव थे?
  3. क्या शामिल है मैंने किसी भी संदर्भ में TagsPart और ContainerPartRecord कानूनी के साथ प्रयास किया है? कौन कौन से?
  4. क्या इन उदाहरणों की क्वेरी सिंटैक्स मुख्य रूप से एनएचबेर्नेट के ऑर्चर्ड, या LINQ से NHibernate का प्रतिबिंब है? यदि यह मुख्य रूप से एनएचबर्ननेट का प्रतिबिंब है, तो एनएचबीर्नेट पुस्तक या आलेख को पढ़ने की अनुशंसा की जाती है ताकि मैं ऑर्चर्ड में गहरी खुदाई कर सकूं?

ऐसा लगता है कि इस तरह के विचारों और प्रश्नों के बारे में दस्तावेज में एक छेद है, जो मॉड्यूल लिखना मुश्किल बनाता है। इस विषय के लिए जो भी उत्तर मिल सकते हैं, मुझे एक लेख या समुदाय ऑर्चर्ड दस्तावेज में संकलित करने में खुशी होगी।

उत्तर

3
  1. इसमें शामिल होने के लिए केवल वहां मौजूद है। इसका मतलब यह नहीं है कि शामिल होने वाला हिस्सा वास्तव में डीबी से नीचे लाया जाएगा। इससे कोई फर्क नहीं पड़ता कि नवीनतम 1.x स्रोत के साथ क्या होगा, और 1.3 के साथ आलसी हो जाएगा।
  2. आपको किसी शर्त की आवश्यकता नहीं है क्योंकि आप केवल इस तरह से भागों में शामिल हो सकते हैं। जॉइन स्थिति अंतर्निहित है: आइटम आइटम आईडी से जुड़े हुए हैं।
  3. हां। कानूनी नहीं है कि उस स्थिति में जहां डेटा का उपयोग किया जा रहा है जो शामिल भाग रिकॉर्ड से उपलब्ध नहीं है।
  4. वे उदाहरण ऑर्चर्ड कंटेंट मैनेजर प्रश्न हैं, इसलिए वे काफी बाध्य हैं, लेकिन जब तक आप अपनी सीमाओं से बाहर नहीं जाते हैं तब तक निर्माण करना काफी आसान है क्योंकि बहुत अधिक माना जा सकता है और यह निश्चित रूप से होगा।यदि आपको अधिक नियंत्रण की आवश्यकता है, तो आप नई एचक्यूएल क्षमताओं का उपयोग कर सकते हैं जो नवीनतम 1.x बूंदों में जोड़े गए थे।

प्रलेखन में छेद के लिए, ठीक है, लेकिन निश्चित रूप से। हमारे पास आज जो दस्तावेज है, वह केवल मंच के एक बहुत ही छोटे हिस्से को कवर कर रहा है। आपका सबसे अच्छा संदर्भ आज स्रोत कोड है। आप जो भी योगदान कर सकते हैं, वह हमारे द्वारा और बाकी समुदाय द्वारा अत्यधिक सराहना की जाती है। अगर आपको इसके साथ मदद की ज़रूरत है तो मुझे बताएं।

+1

आपके उत्तर एक बड़ी मदद हैं। मुझे लगता है कि अगला कदम, नए दस्तावेज के लिए तैयार करने के लिए, उत्तर # 2 पर विस्तृत करना है। अभी के लिए, मुझे लगता है कि क्यू एंड ए मंच से एक संवाद बेहतर होगा। क्या हमारे पास ई-मेल चर्चा हो सकती है? [email protected] –