2012-02-07 11 views
5

हमें पता चला कि सीआरएम 2011 के लिए लिंक बहुत टूटा हुआ है - ऐसा लगता है कि इसमें किसी भी क्यूए के बिना प्रदर्शन किया गया है। एक संकेतक कि प्रदाता कितनी बुरी तरह टूट गया है, जैसे क्वेरी है। जहां (x => x == "b") काम करता है लेकिन यह। जहां (x => "b" == x) कुछ पिछली स्थिति के आधार पर नहीं हो सकता है बयान में शामिल हों मुझे वास्तव में क्वेरी प्रदाता के कुछ हिस्सों को फिर से लिखना पड़ा है और मैं एक साथ रखे बकवास के साथ बेहतर भाग्य का आनंद ले रहा हूं।QueryExpression बनाम FetchXml CRM2011

हालांकि यह नहीं चल सकता है, अभी भी अन्य मुद्दे हैं और मुझे एमएस के लिए काम करने के लिए भुगतान नहीं किया गया है, इसलिए मैं विकल्पों को देख रहा हूं। http://msdn.microsoft.com/en-us/library/gg334607.aspx

किसी को भी मुझे एक ईमानदार, वास्तविक जीवन पेशेवरों और QueryExpression बनाम FetchXml का उपयोग करने का विपक्ष दे सकते हैं: के रूप में यहाँ विस्तृत इन 2 QueryExpression & FetchXml आया? मैं जानना चाहता हूं कि प्रदर्शन, विकास की गति, मजबूती और लचीलापन के मामले में वे तुलना कैसे करते हैं।

उत्तर

9

मेरी राय में, मैं आमतौर पर आवश्यकताओं के आधार पर लिंक या FetchXml के लिए जाता हूं।

लिंक के लिए: प्रारंभिक सीमा के मामले में, मुझे लिंक का उपयोग करना पसंद है क्योंकि यह दृढ़ता से टाइप किया गया है और यह विकास की गति के लिए बहुत मदद करता है, लेकिन जैसा आपने ऊपर बताया है, इसके नुकसान हैं।

FetchXML के लिए: मैं वास्तव में इस जादू कथन का उपयोग प्यार:

EntityCollection result = _serviceProxy.RetrieveMultiple(new FetchExpression(fetch2)); 

foreach (var c in result.Entities) 
{ 
    System.Console.WriteLine(c.Attributes["name"]); 
} 

क्यों? क्योंकि यह एग्रीगेशन और समूह के अलावा QueryExpression का उपयोग करने जैसा ही है। FetxhXML के बारे में मुझे नफरत करने वाली एकमात्र चीज यह है कि लिंक के विपरीत, बनाना मुश्किल है।

FetchXML प्रश्नों के निर्माण के लिए, मुझे उन्नत-खोज खोलना है, फिर कॉलम जोड़ें और फिर अपना मानदंड डालें और अंत में, मैं इसे डाउनलोड करता हूं और इसे अपने कोड में कॉपी करता हूं, और इसी तरह।

अंत में, FetchXML में दूसरों के बीच कम से कम सीमाएं हैं।

प्रदर्शन के संबंध में मैंने स्टॉपवॉच का उपयोग कर उसी क्वेरी के लिए लिंक और FetchXML के बीच बेंचमार्क करने का प्रयास किया है, परिणामस्वरूप FetchXML लिंक से तेज है।

+0

अनवर का आनंद लें, आप क्यों कहा कि एक जादू बयान है? ऐसा लगता है कि आप अभी भी वस्तुओं जो आसान नहीं है में परिणाम deserialize की जरूरत है। मुझे सीधे सीआरएम वेब ऐप से fetchxml डाउनलोड करने का विचार पसंद है। – Alwyn

+1

क्योंकि सीआरएम 2004 में पहले से मैं तो एक XmlDocument में लौटे एक्सएमएल लोड प्रत्येक नोड और इतने पर है, जो एक भयानक कोड के लिए परिणाम की जांच करने के लिए किया था। – Anwar

+0

यह धन्यवाद :) – Alwyn

10

अनवर के उत्कृष्ट उत्तर पर LINQ बनाम FetchXml पर ध्यान केंद्रित करने के लिए, मैं कभीQueryExpression का उपयोग करूंगा। Why?

LINQ: प्रश्नों मानक भाषा का उपयोग कर बनाया जाता है, लेकिन आंतरिक रूप से QueryExpression तो QueryExpression की विशेषताओं तक सीमित है उपयोग करता है।

क्वेरीरी एक्सप्रेशन: क्वेरीज ऑब्जेक्ट मॉडल के रूप में बनाई गई हैं। समेकन और समूह के अलावा FetchXML में सभी सुविधाओं का समर्थन करता है।

तो यह FetchXmlसे बिजली की क्वेरी बिना उन्नत कोड पीढ़ी का पता लगाएं में भी बदतर है, और जब तक पूरी तरह से गैर मानक क्वेरी इंटरफेस (LINQ के विपरीत) की पेशकश यह LINQ प्रदाता के रूप में ही कार्यक्षमता प्रदान करता है।

LINQ (गैर) कार्यक्षमता के लिए, LINQ प्रदाता की सीमाएं स्पष्ट रूप से हैं, और मुझे लगता है कि काफी अच्छी तरह से, documented

जहां: खंड के बाईं ओर एक विशेषता नाम और खंड के सही पक्ष में होना चाहिए एक मूल्य होना चाहिए आपका .Where(x => "b" == x) टुकड़ा, उदाहरण के लिए, where खंड प्रतिबंध का उल्लंघन करती है। आप बाईं तरफ स्थिर पर सेट नहीं कर सकते हैं। खंड के दोनों पक्ष स्थिरांक नहीं हो सकते हैं।

का बचाव नहीं माइक्रोसॉफ्ट: वे एक बहुत LINQ प्रदाता पर काम का में डाल करने की आवश्यकता है (पढ़ें: डायरेक्ट-टू-एसक्यूएल प्रदाता) LINQ प्रदाता से पहले पेशेवर ग्रेड है, लेकिन हे, कम से कम उन्हें एक महान अस्वीकरण मिला है।

+1

आपको लगता है कि QueryExpression FetchXML में सभी सुविधाओं का समर्थन करता है उल्लेख मिला है, लेकिन यह नेस्ट नहीं कर सकते हैं मिलती है, यह कई मिलती है, यह बाहरी मिलती है ऐसा नहीं कर सकते यह नहीं कर सकते कई शर्तों के साथ जुड़ जाता है नहीं कर सकते। हालांकि, ये सभी FetchXml के साथ संभव हैं। – Abel

+0

@Abel: मैं उस पर अपना शब्द लूंगा, क्योंकि मैं 'QueryExpression' का उपयोग नहीं करता हूं। मुझे लगता है कि उन लोगों के माइक्रोसॉफ्ट के शब्द हैं, मेरा (ऊपर लिंक देखें), तो मैं अपनी दस्तावेज़ीकरण सही नहीं कर सकते हैं नहीं जोड़ना चाहिए। –

+1

ठीक है, अधिक सटीक रूप से, QueryExpression क्लास स्वयं उनका समर्थन करता है, लेकिन जब आप CrmService के खिलाफ अभिव्यक्ति को चलाने का प्रयास करते हैं, तो यह हमेशा 'SOAPException' के साथ विफल हो जाएगा। इंटरनेट इस बारे में शिकायतों से भरा है। – Abel

5

मुझे विशेष रूप से क्लाइंट द्वारा क्वेरी अभिव्यक्ति मॉडल का उपयोग करने के लिए कहा गया है, ताकि मेरी ज़िंदगी को आसान बनाने के लिए, मैंने IOrganizationService में बहुत से विस्तार विधियों को जोड़ने का प्रयास किया है। उदाहरणों में शामिल हैं:

public static List<T> GetEntities<T>(
    this IOrganizationService service, 
    params object[] columnNameAndValuePairs 
) where T : Entity 

जो एक प्रश्न अभिव्यक्ति में परम वस्तु [] और टी इकाई प्रकार बदल देता है, और स्वचालित रूप से एक इकाई सूची में परिणाम देता है। तो यह तो की तरह इस्तेमाल किया जाता है: आप एक अधिक LINQ देने

public static T GetFirstOrDefault<T>(
    this IOrganizationService service, 
    params object[] columnNameAndValuePairs 
) where T : Entity 

var c = service.GetFirstOrDefault<Contact>("owner", id); 

विस्तार तरीकों में से इन प्रकार क्वेरी के साथ काम करते हैं, बहुत आसान भाव:

foreach(var c in service.GetEntities<Contact>("lastname", "Doe", "firstname", "Smith")) 
{ 
    ... 
} 

मैं भी इस एक एक बहुत भी उपयोग टाइप स्टाइल, अजीब linq प्रतिबंध जाल के बिना जो गिरने में आसान है।

+0

बहुत अच्छा है। साझा करने के लिए धन्यवाद! – Eccountable

+0

@ योग्य, अधिक उदाहरणों के लिए यूनिट परीक्षण ढांचे में DLaB.Xrm.Common लाइब्रेरी देखें: https://github.com/daryllabar/XrmUnitTest – Daryl

1

मैं FetchXML के पक्ष में वकालत करता हूं क्योंकि मैं इसे अपने जावास्क्रिप्ट या सी # कोड में LINQ या QueryExpression के विपरीत उपयोग कर सकता हूं ... इसलिए सीखने और बनाए रखने के लिए एक कम चीज़। इंटेलिसेंस जैसी चीजों के लिए, एक शानदार टूल है जो एक्सआरएमटूलबॉक्स में प्लग करता है जिसे FetchXML Builder कहा जाता है जो जटिल खोजों को डिजाइन करने में अधिक परिष्कृत है, आप उन्नत खोज का उपयोग करके कभी भी देखेंगे। मैं अब सीआरएम ऑनलाइन क्लाइंट के लिए एक महीने के लिए इसका उपयोग कर रहा हूं और यह एसक्यूएल का उपयोग करने के करीब है क्योंकि आप इस माहौल में प्राप्त कर सकते हैं। यह मेरे लिए QueryExpression कोड भी उत्पन्न कर सकता है। मैंने इस टूल को अपने व्यावसायिक विश्लेषकों के पास बदल दिया है और वे डैशबोर्ड के लिए परिष्कृत डेटा सेट बनाने के लिए इसका उपयोग कर शहर में जा रहे हैं - ग्राहकों के लिए एक बड़ी जीत।

मैं जल्दी बंधन के साथ त्रुटियों का पता लगाने के नुकसान विलाप करते हैं, लेकिन मैं