2008-08-28 11 views
21

XPO मेरी कंपनी में पसंद का ऑब्जेक्ट रिलेशनल मैपर है। पेशेवरों और विपक्ष पर कोई विचार?DevExpress XPO ORM पैकेज पर कोई विचार?


मैं केवल उत्पाद के बारे में सामान्य भावना और उपाख्यानों की तलाश में था। हम XPO पर स्विच नहीं कर रहे हैं। हम ऐप में रहने वाले हार्ड कोडेड एसक्यूएल तारों से छुटकारा पा रहे हैं और सभी डेटा एक्सेस के लिए पूरी तरह से ओआरएम में जा रहे हैं।

+0

XPO एक सरल कस्टम एसक्यूएल कमांड को किस प्रकार (शामिल, ...) या स्टोर प्रक्रियाओं के साथ काम कर रहा है, इस पर कोई विचार है? – bmustata

उत्तर

0

क्या तुलना में पेशेवरों और विपक्ष की तुलना में? ब्लॉक पर नए बच्चे 'एडीओ.NET इकाई फ्रेमवर्क' के साथ, वहां बहुत सारे विकल्प हैं, सबसे लोकप्रिय nHibernate।

वैसे भी, आपकी स्थिति और आवश्यकताओं के आधार पर सैकड़ों उत्तर हैं।

15

दूसरों शायद तकनीकी जवाब के साथ में पिच (जैसे क्वेरी सिंटैक्स, कैशिंग के उपयोग के लिए, एक मौजूदा डेटाबेस संरचना करने के लिए कम या मैपिंग की अन्यथा) होगा - लेकिन अगर आप एक स्थापित ORM परत है इस सवाल का जवाब शायद

है

"क्यों बदलते हैं"?

मैंने कई सौ उपयोगकर्ताओं के साथ एक स्थापित वाणिज्यिक उत्पाद में वर्षों से XPO सफलतापूर्वक उपयोग किया है। मुझे लगता है कि यह तेज़, लचीला है और नौकरी करता है। मुझे इस समय बदलने की कोई ज़रूरत नहीं है, क्योंकि हमारे डेटा वॉल्यूम विशेष रूप से बड़े नहीं होते हैं और फॉइबल्स (कैशिंग, ज्यादातर) चीजें हैं जिनके बारे में हम काम कर सकते हैं।

अगर मैं फिर से शुरू कर रहा था तो मैं निश्चित रूप से एनएचबीरनेट और एडीओ.NET इकाई फ्रेमवर्क दोनों को देखता हूं। अभ्यास में, हालांकि, सभी अच्छे हैं; मैं तकनीकी प्रश्नों से पहले परियोजना के लिए वाणिज्यिक स्थिति को देखता हूं।

उदाहरण के लिए, एनएचबेर्नेट ओपन-सोर्स है - क्या उपकरण का समर्थन करने और (यदि आवश्यक हो) वाणिज्यिक सहायता प्रदान करने के लिए वहां एक व्यवहार्य समुदाय है?

XPO एक उपकरण विक्रेता से आता है, क्या वे उत्पाद के जीवनकाल के लिए व्यवसाय में रहने की संभावना रखते हैं?

एडीओ.NET इकाई फ्रेमवर्क माइक्रोसॉफ्ट से आता है, जो डेटाबेस प्रौद्योगिकियों को बदलने के लिए कुख्यात हैं, फिर लैरी जेट ईंधन के साथ अपने सेनानी को भरती है - क्या यह भी फीका हो जाएगा?

0

मुझे यह तथ्य पसंद है कि आप केवल कक्षाएं बना सकते हैं, और xpo आपके लिए टेबल और रिश्तों को बनाता है - ताकि आप रिक्त डेटाबेस से शुरू कर सकें।

एक मुद्दा मुझे पसंद नहीं है जब मैं सामान का पूरा समूह हटाना चाहता हूं, तो यह मेरे संग्रह के माध्यम से जाएगा और प्रत्येक पर एक हटा देगा। इसमें उम्र लगती है, इसलिए इस तरह के उदाहरण के लिए, मुझे कुछ कस्टम एसक्यूएल लिखना पड़ा (ब्लाह से हटाएं)। मैं XPO पर कोई विशेषज्ञ नहीं हूं, लेकिन मुझे यही मिला।

+0

यह एनएचबेर्नेट और ईएफ के साथ भी किया जा सकता है: इसे कोड-पहला दृष्टिकोण कहा जाता है। –

0

दूसरी बात यह है कि कुछ संग्रहों के साथ हटने वाली जटिल वस्तुओं को वास्तव में वास्तव में लंबा लगता है। अभी तक दस्तावेज या मंच इस के साथ मेरी मदद करने में सक्षम नहीं थे।

इसके अलावा यह उपयोग करना वास्तव में आसान है और आप जल्दी से जा रहे हैं।

आपके मेमोरी उपयोग को समझना भी मुश्किल है, मेरे डिजाइन में जटिल बड़ी वस्तुएं थीं और उनके साथ काम करना एक स्मृति हॉग था जो मैंने ग्रहण किया था।

9

मुझे XPO के साथ काम करने में बहुत निराशा मिली है। ओआरएम का मुख्य विचार अंतर्निहित डेटा संरचना को दूर करना है।लेकिन बहुत तेज़ी से आप देखेंगे कि उनके पास 60 वर्णों के लिए हार्डकोड की डिफ़ॉल्ट स्ट्रिंग लम्बाई है, इसलिए आप इन बदसूरत स्ट्रिंग को जोड़ते हैं। प्रत्येक स्ट्रिंग के आसपास असीमित चीजें। अमूर्तता के लिए बहुत कुछ ...

अधिक जटिल ऑब्जेक्ट को मॉडलिंग करते समय आपको बहुत सारे वाक्यविन्यास का उपयोग करना पड़ता है जिसमें वास्तव में आपके ऑब्जेक्ट मॉडल में XPCollection की कोई जगह नहीं है। मैं एक कक्षा को स्टोर करना चाहता था जिसमें वर्ग पर तारों का शब्दकोश था, लेकिन दुख की बात है कि XPO स्वचालित रूप से डेटाबेस में इसे संग्रहीत करने में सक्षम नहीं था।

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

+3

मैंने उन्हें अपने आखिरी काम पर वर्षों तक इस्तेमाल किया, हालांकि xpo के लिए नहीं, और हमेशा उनका समर्थन बकाया होने के लिए मिला। दायर की गई बग हर समय, या फीचर अनुरोध, और वे सभी बहुत जल्दी जवाब दिया गया। बग तेजी से तय किए गए थे, और उन्हें मुझे पूर्व-रिलीज के लिए एक लिंक देने में कोई समस्या नहीं थी जिसमें फिक्स शामिल थे। इसका उपयोग करने के बारे में मेरे सभी प्रश्नों का भी उत्तर दिया गया था, अक्सर नमूना कोड के साथ। मैंने गुणवत्ता के मुद्दों को प्रस्तुत करने के लिए एक बड़ा प्रयास किया, इसलिए शायद यही कारण है। लगता है कि उन सभी वर्षों में केवल एक मुद्दा डुप्लिकेट के रूप में फ़्लैग किया गया है। आईएमओ के साथ काम करने के लिए महान कंपनी। –

+3

डिफ़ॉल्ट रूप से, स्ट्रिंग गुणों को आकार 100 के कॉलम पर मैप किया जाता है। किसी भी तरह से, आप स्थिर आकार Attribute.DefaultStringMappingFieldSize प्रॉपर्टी के माध्यम से डिफ़ॉल्ट आकार को आसानी से बदल सकते हैं (इसे केवल एक बार किया जाना चाहिए)। इसके अतिरिक्त, आप SizeAtrribute के साथ चिह्नित करके व्यक्तिगत गुणों के आकार को नियंत्रित कर सकते हैं, उदा। [आकार (255)] सी # में। अधिक जानकारी http://documentation.devexpress.com/#XPO/clsDevExpressXpoSizeAttributetopic अंत में, आप उस कॉलम के डेटाबेस प्रकार को भी निर्दिष्ट कर सकते हैं जिसे किसी संपत्ति को DBTypeAttribute के माध्यम से मैप किया गया है, उदाहरण के लिए [DbType ("smalldatetime ")] –

+0

कस्टम जटिल प्रकारों को संग्रहीत करने के लिए, मुझे संदेह है कि अन्य ओआरएम के लिए इसका समर्थन है। आउट-ऑफ-द-बॉक्स XPO सामान्य और सबसे अधिक उपयोग किए जाने वाले प्रकारों को बनाए रखने में सक्षम है और * वैल्यू कन्वर्टर्स के तंत्र के माध्यम से * किसी कस्टम प्रकार * को स्टोर करने की क्षमता * प्रदान करता है। उदाहरण के लिए, ImageValueConverter और UtcDateTimeConverter ऐसे मान कनवर्टर्स के उदाहरण हैं। कस्टम वैल्यू कनवर्टर को कार्यान्वित करना आसान है, क्योंकि आपको केवल दो तरीकों को लागू करना है। अधिक जानकारी http://documentation.devexpress.com/#XPO/clsDevExpressXpoMetadataValueConvertertopic –

3

कुल मिलाकर XPO के साथ काम करना आसान है। हालांकि, जब आप विरासत डेटाबेस के साथ काम करने की योजना बनाते हैं या इसे ब्राउनफील्ड ऐप में पेश करने का प्रयास करते हैं तो यह थोड़ा दर्द हो सकता है। मैंने जो सबसे दर्दनाक बाधाओं को मारा था:

  • सभी ऑब्जेक्ट्स को XPO संबंधित कक्षाओं से प्राप्त करने की आवश्यकता है और/या XPO संबंधित विशेषताओं का उपयोग करें। इसलिए, कोई POCO ऑब्जेक्ट्स
  • केवल पढ़ने वाले लगातार फ़ील्ड OOTB के लिए कोई समर्थन नहीं है। यह संभव है, लेकिन आपको XPO को डीबी
  • में पूर्व फ़िल्टरिंग एसोसिएशन के लिए कोई समर्थन नहीं देने से रोकने के लिए थोड़ा हैकिंग करने की आवश्यकता है, जो अत्यधिक नेटवर्क लोड
  • विदेशी समग्र कुंजी के लिए खराब समर्थन का कारण बन सकता है। निष्पक्ष होने के लिए, कोई ओआरएम समग्र कुंजी को अच्छी तरह से संभालता है। उन्हें "एंटी-ओआरएम" पैटर्न माना जाता है।
  • कुछ छोटे खीज

के रूप में डेनिस टिप्पणी में कहा, XPO काफी सुधार किया गया था के बाद से मैं इस सवाल का जवाब मूल रूप से लिखा था। विशेष रूप से, नीचे बातें कोई मुद्दा नहीं रह रहे हैं:

  • कोई क्रमबद्धता, तो XPO वस्तुओं disconected जीत में उपयोग करने के लिए मुश्किल है परिदृश्य रूपों, डेटा वेब सेवाओं के माध्यम से आने के साथ। - एक्सपीओ अब विभिन्न धारावाहिक परिदृश्यों का समर्थन करता है और आसानी से डब्ल्यूसीएफ के साथ उपयोग किया जा सकता है।
  • आप अपनी खुद की अंतरिम तालिका के साथ कई से अधिक संबंध मैपिंग नहीं कर सकते हैं। एक्सपीओ इस तरह के अंतरिम टेबल के लिए विशिष्ट नाम चाहता है। - यह अब कोई मामला नहीं है
  • postgreSql प्रदाता में enums के लिए कोई समर्थन नहीं - आपको बस वास्तव में सरल मूल्य कनवर्टर लिखने की आवश्यकता है और आप अच्छे हैं।

इसके अलावा, मुद्दों नीचे नहीं रह अगले XPO रिलीज के साथ समस्या इस साल हो जाएगा, बाद में आने वाले:

  • प्रकार की चाबी लंबे
  • postrgeSql प्रदाता
  • में डाटाबेस स्कीमा के लिए कोई समर्थन के लिए कोई समर्थन

सब कुछ, XPO में काफी सुधार हुआ था। सबसे दर्दनाक बाधाओं को हटा दिया गया था। विरासत डीबी के साथ काम करते समय भी आप समस्याएं मार सकते हैं। लेकिन सामान्य एक्सपीओ में उपयोग करने के लिए काफी सुविधाजनक हो गया।

+0

पोस्टग्रे क्वालिम अन्य सभी पर विचार कर रहे हैं - अधिक सामान्य - डीबी समर्थित। 2 गलत है, XPCustomObject से प्राप्त है। 3 साथ ही तभी लागू होता है जब आप जेनरेट किए गए फ़ील्ड का उपयोग कर रहे हों। 4 एक ओआरएम के इरादे से काउंटर है। डब्लूआरटी 9, इसके बजाय जेट प्रदाता का उपयोग करें, और यदि आप डब्ल्यूसीएफ/वेब सेवाओं का उपयोग कर रहे हैं तो इसे स्वयं क्रमबद्ध करें। मुझे गलत मत समझो, मैं कोई xpo प्रचारक नहीं हूँ; यह सिर्फ एक गरीब सूची है। –

+0

2 गलत नहीं है। यदि आप XPCustomObject से प्राप्त करते हैं और Int64 के प्रकार पर KeyAttribute डालते हैं, तो आप अपवाद के साथ समाप्त होते हैं। KeyAttribute दुर्भाग्य से Int32 या Guid फ़ील्ड के साथ ही काम करता है। 3 जेनरेट किए गए फ़ील्ड पर लागू है - सहमत। यह बिल्कुल सही मुद्दा है जिसका मैं उल्लेख करता हूं। XPO के साथ अब ऐसे फ़ील्ड को संभालने का कोई तरीका नहीं है। डब्लूआरटी 4 - "ओआरएम के इरादे से काउंटर" का क्या मतलब है? मुझे अपने मौजूदा डीबी की स्कीमा को प्रतिबिंबित करने की आवश्यकता है। मैं "ओआरएम के इरादे" के अनुरूप होने के लिए टेबल का नाम नहीं बदल सकता। मुझे अपने विरासत परिदृश्यों को कवर करने के लिए पर्याप्त लचीला होने के लिए ओआरएम की आवश्यकता है। – Przemaas

+0

PostreSql मुद्दे कोने के मामले हैं - सहमत हैं। मुझे आशा है कि अन्य डीबीएस के लिए Xpo प्रदाताओं बग के लिए स्वतंत्र हैं और उन डीबीएस की सबसे नई सुविधाओं के साथ काम करने की अनुमति है। आप अपनी सूची गरीब कहते हैं, लेकिन इन सभी मुद्दों को वास्तविक बाधाओं विरासत DB और Xpo के साथ काम करते हुए जब आप उन्हें मारा है। – Przemaas

4

मैं अब 6-7 महीने के लिए इसके साथ काम कर रहा हूं और मेरे लिए विक्रेता यह तथ्य था कि उनके सभी यूआई घटक एक्सपीओ के साथ अपेक्षाकृत सहजता से काम करते हैं - और उनके यूआई घटक शीर्ष पायदान हैं।

कुछ लोग ध्यान दें कि उनके मंचों की खराब निगरानी की जा रही है और उनके पास बहुत उपयोगी ट्रैफ़िक है - यह सच है। रहस्य हालांकि टिकट भरना है।वे अपने सभी समर्थन टिकटों के लिए जल्दी और सटीक प्रतिक्रिया देते हैं।

+0

और उनकी सहायता केंद्र वेबसाइट एक योयो की तरह ऊपर और नीचे है ... – Junto

+0

हां, अभी के लिए मैं ** समर्थन केंद्र ** (http://www.devexpress.com/Support/Center का उपयोग करना बेहतर है) /) XPO फ़ोरम (http://community.devexpress.com/forums/163.aspx) के बजाय, यदि आप DevExpress प्रतिनिधियों से त्वरित और गारंटीकृत सहायता प्राप्त करना चाहते हैं।सौभाग्य से, मंचों और समर्थन केंद्र के बीच कम भ्रम हो जाएगा जब वे एक उपकरण, एला स्टैक ओवरफ्लो में विलय हो जाएंगे। बीटीडब्ल्यू, सोशल नेटवर्क में समूहों के माध्यम से एक्सपीओ और एक्सएएफ के बारे में फीडबैक पास करना भी संभव है: http://community.devexpress.com/blogs/eaf/archive/2011/05/06/frameworks-fan-clubs- इन-सामाजिक-networks.aspx –

0

यह सब आप (अन्य प्रणालियों में भी ऐसा ही करने की कोशिश) अपने डोमेन वस्तुओं लेखन शुरू करने करने की ज़रूरत है:

using System; 
using DevExpress.Xpo; 
using DevExpress.Data.Filtering; 
using NUnit.Framework; 

namespace XpoTdd { 
    public class Person:XPObject { 
     public Person(Session session) : base(session) { } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     [Persistent] 
     public string FullName { get { return FirstName + " " + LastName; } } 
    } 
    [TestFixture] 
    public class PersonTests { 
     [Test] 
     public void TestPersistence() { 
      const string connStr = "Integrated Security=SSPI;Pooling=false;Data Source=(local);Initial Catalog=XpoTddTest"; 
      UnitOfWork session1 = new UnitOfWork(); 
      session1.ConnectionString = connStr; 
      Person me = new Person(session1); 
      me.FirstName = "Roman"; 
      me.LastName = "Eremin"; 
      session1.CommitChanges(); 
      UnitOfWork session2 = new UnitOfWork(); 
      session2.ConnectionString = connStr; 
      me = session2.FindObject<Person>(CriteriaOperator.Parse("FullName = 'Roman Eremin'")); 
      Assert.AreEqual("Roman Eremin", me.FullName); 
     } 
    } 
} 
2

XPO ver 10.2 अब दोनों StoredProcedures और SqlQueries के लिए समर्थन करता है। देखें here ...

संबंधित मुद्दे