2008-08-20 14 views
20

के अलावा आप अन्य चीज़ों का उपयोग करते हैं। मुझे नेटसेट में डेटासेट/डेटाटेबल/डेटारो प्रतिमान से लगातार असंतुष्ट पाया गया है, अधिकांशतः क्योंकि यह वास्तव में कुछ कदमों से अधिक जटिल होता है जो मैं वास्तव में करना चाहता हूं। ऐसे मामलों में जहां मैं नियंत्रण के लिए बाध्यकारी हूं, डेटासेट ठीक हैं। लेकिन अन्य मामलों में, मानसिक ओवरहेड की उचित मात्रा में प्रतीत होता है।सी #: डेटासेट

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

मैं सबसे अच्छा/सबसे खराब तोड़ने की तलाश नहीं कर रहा हूं, बस उत्सुक हूं कि मेरे विकल्प क्या हैं और आपके साथ क्या अनुभव हैं। धन्यवाद!

-Eric Sipple

उत्तर

20

के बाद से .NET 3.5 बाहर आया, मैं विशेष रूप से LINQ का उपयोग किया है। यह वास्तव में अच्छा है; मुझे अब भी उन पुराने क्रश का उपयोग करने का कोई कारण नहीं दिख रहा है।

LINQ के रूप में महान है, हालांकि, मुझे लगता है कि कोई भी ओआरएम सिस्टम आपको उस ड्रेक से दूर करने की अनुमति देगा।

+0

क्या आपका मतलब LINQ से SQL (उर्फ एल 2 एस) है? – rohancragg

+0

जाहिर है, चूंकि हम डेटाबेस पहुंच के बारे में बात कर रहे हैं। यद्यपि LINQ से सबकुछ अन्यथा उतना ही अच्छा है। – TheSmurf

4

हम डेटासेट से दूर चले गए हैं और CSLA पर आधारित अपनी स्वयं की ORM ऑब्जेक्ट्स को कम से कम बनाया है। आप डेटासेट या LINQ या ORM के साथ एक ही काम कर सकते हैं लेकिन इसका पुनः उपयोग कर रहे हैं (हमने पाया है) बहुत आसान है। 'कम कोड अधिक खुश बनाता है'।

1

मैं उन्हें बड़े पैमाने पर उपयोग करता हूं लेकिन मैं किसी भी "उन्नत" विशेषताओं का उपयोग नहीं करता हूं, जो कि फ्रेमवर्क पहली बार बाहर निकलने पर माइक्रोसॉफ्ट वास्तव में धक्का दे रहा था। मैं मूल रूप से उन्हें हैशटेबल्स की सूची के रूप में उपयोग कर रहा हूं, जो मुझे पूरी तरह से उपयोगी लगता है।

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

बेशक, मैं अजीब लोगों में से एक हूं जो वास्तव में एक इकाई ऑब्जेक्ट उदाहरण के लिए डेटारो पसंद करते हैं।

1

प्री लिनक मैंने अपने स्वयं के कस्टम डोमेन ऑब्जेक्ट्स की सूची भरने के लिए डेटा रीडर का उपयोग किया, लेकिन लिनक्स के बाद मैं एल 2 एस इकाइयों को भरने के लिए एल 2 एस का उपयोग कर रहा हूं, या डोमेन ऑब्जेक्ट्स भरने के लिए एल 2 एस।

एक बार जब मुझे जांच करने में थोड़ा और समय मिलता है तो मुझे संदेह है कि इकाई फ्रेमवर्क ऑब्जेक्ट्स मेरा नया पसंदीदा समाधान होगा!

3

मुझे नेट 1.1 में डेटासेट्स से तंग आ गया था, कम से कम उन्होंने इसे अनुकूलित किया ताकि यह बड़े सेटों के लिए तेजी से धीमा न हो।

यह हमेशा एक बदमाश मॉडल था - मैंने कई ऐप्स नहीं देखा है जो इसकी अधिकांश सुविधाओं का उपयोग करते हैं।

SqlDataReader अच्छा था, लेकिन मैं इसे IEnumerable<T> में लपेटता था जहां टी मेरी डेटा पंक्ति का कुछ टाइप प्रस्तुत था।

लिंक मेरी राय में एक बेहतर बेहतर प्रतिस्थापन है।

0

मैं सिर्फ अपनी व्यावसायिक वस्तुओं को खरोंच से बनाता हूं, और शुरुआत में डेटाटेबल का उपयोग नहीं करता हूं और विशेष रूप से डेटासेट को नहीं, सिवाय इसके कि व्यावसायिक वस्तुओं को प्रारंभ में छोड़कर। अपने स्वयं के निर्माण के फायदे टेस्टेबिलिटी, टाइप सुरक्षा और इंटेलिजेंस, एक्स्टेंसिबिलिटी (डेटासेट में जोड़ने का प्रयास करें) और पठनीयता (जब तक आप कनवर्ट.ओडीसीमल (डीटी.रोज़ [i] ["blah"] जैसी चीज़ों को पढ़ने का आनंद लेते हैं। ToString()))।

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

2

डेटासेट डेमो के लिए बहुत अच्छे हैं।

मुझे नहीं पता कि अगर आप इसे इस्तेमाल करते हैं तो मुझे क्या करना है।

मैं ObservableCollection

का उपयोग फिर मैं क्लाइंट ऐप अंतरिक्ष, WPF और Silverlight में हूँ। तो एक सेवा के माध्यम से एक डेटासेट या डेटाटेबल गुजर रहा है ... सकल।

डेटा रीडर तेजी से हैं, क्योंकि वे परिणाम सेट की एकमात्र स्ट्रीम हैं।

1

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

यदि आप कच्चे डेटासेट और पंक्तियां कर रहे हैं और क्या नहीं, तो ओआरएम को आजमाने के लिए दिन बिताएं और आप आश्चर्यचकित होंगे कि आप खेतों में मैपिंग कॉलम की सभी कठोर परिश्रम कैसे कर सकते हैं या एसक्यूएल कमांड ऑब्जेक्ट्स भरने और हर दूसरे हॉप कूदने के हर समय हम सभी एक बार चले गए।

मुझे कुछ सबसनिक पसंद है, हालांकि डेमो/प्रोटोटाइप के साथ छोटे पैमाने पर परियोजनाओं के लिए, मुझे लिंक से एसक्यूएल बहुत उपयोगी भी लगता है। हालांकि मैं जुनून के साथ ईएफ से नफरत करता हूं। : पी

3

मैं Data Transfer Objects पैटर्न (मूल रूप से जावा दुनिया से, मुझे विश्वास है) का उपयोग कर रहा है, एक एसकडेटा रीडर के साथ डेटा परत से डीटीओ के संग्रह को पॉप-अप करने के लिए आवेदन की अन्य परतों में उपयोग के लिए डेटा परत से संग्रहित किया गया है। डीटीओ स्वयं बहुत हल्के और साधारण वर्ग होते हैं जो गुण/सेट के साथ गुणों से बना होते हैं। उन्हें आसानी से क्रमबद्ध/deserialized किया जा सकता है, और डाटाबेसिंग के लिए इस्तेमाल किया जा सकता है, जिससे वे मेरी अधिकांश विकास आवश्यकताओं के लिए काफी अनुकूल हैं।

-1

मैं डेटासेट का उपयोग कभी नहीं करता हूं। वे बड़े हेवीवेट ऑब्जेक्ट्स केवल "प्रयोज्य" के लिए उपयोग करने योग्य हैं (जैसा कि किसी ने यहां बताया है)। यहां दिखाए गए बहुत सारे शानदार विकल्प हैं।

+0

"हेवीवेट ऑब्जेक्ट्स"? क्या उस शब्द का वास्तव में कोई अर्थ है? –

+0

हां एक महत्वपूर्ण अर्थ है। किसी XML फ़ाइल में केवल कुछ पंक्तियों के साथ एक डेटासेट को क्रमबद्ध करें और देखें कि यह कितना बड़ा है। फिर एक साधारण डेटा ट्रांसफर ऑब्जेक्ट (जेसी की प्रतिक्रिया) बनाएं। बस प्रत्येक कॉलम के सदस्यों के साथ एक साधारण वर्ग को परिभाषित करें - और फिर एक सूची कक्षा। एक XML फ़ाइल को क्रमबद्ध करें - और अंतर को देखें। – fuzzbone

+1

यदि आप वास्तव में डेटासेट्स को क्रमबद्ध कर रहे हैं, और फिर उन्हें तार या कुछ पर पारित कर रहे हैं, और वास्तविक प्रदर्शन समस्या है, तो यह एक बात है।लेकिन मैंने "डेटासेट ब्लोट" को घृणित, स्ट्रिंग-शाब्दिक-लड़े कोड बनाने के लिए औचित्य के रूप में उपयोग किया है जो मैंने कहीं भी कई दुकानों में डेटा रीडर का उपयोग किया है। –

3

मैं SubSonic का एक बड़ा प्रशंसक हूं। एक अच्छी तरह से लिखित बैच/सीएमडी फ़ाइल मिनटों में आपके डेटाबेस के लिए एक संपूर्ण ऑब्जेक्ट मॉडल उत्पन्न कर सकती है; आप इसे अपने स्वयं के डीएलएल में संकलित कर सकते हैं और इसे आवश्यकतानुसार उपयोग कर सकते हैं। अद्भुत मॉडल, अद्भुत उपकरण। यह साइट एएसपी.नेट सौदे की तरह लगती है, लेकिन आमतौर पर यह कहती है कि अगर आप इसके यूआई फ्रेमवर्क (जिसे मैं साधारण रूप से निराश हूं) या उसके एप्लिकेशन-स्तरीय ऑटो-पीढ़ी के उपकरण का उपयोग करने की कोशिश नहीं कर रहा हूं तो यह कहीं भी अद्भुत तरीके से काम करता है ।

रिकॉर्ड के लिए, यहाँ मैं इसके साथ काम करने के लिए उपयोग करने के आदेश का एक संस्करण है (ताकि आप इसे लड़ने के लिए शुरू में बहुत कठिन नहीं है):

sonic.exe generate /server [servername] /db [dbname] /out [outputPathForCSfiles] /generatedNamespace [myNamespace] /useSPs true /removeUnderscores true 

यह हर बार करता है। .. फिर उस निर्देशिका से डीएलएल का निर्माण करें - यह एक NANT प्रोजेक्ट का हिस्सा है, जिसे क्रूज़ कंट्रोल.नेट द्वारा निकाल दिया गया - और दूर हम जाते हैं। मैं WinForms, ASP.NET, यहां तक ​​कि कुछ कमांड लाइन utils में इसका उपयोग कर रहा हूँ। यह सबसे कम निर्भरताओं और सबसे बड़ी "पोर्टेबिलिटी" (संबंधित परियोजनाओं, ईजी के बीच) उत्पन्न करता है।

नोट

ऊपर अब एक अच्छी तरह से अधिक साल पुराना है। जब भी मैं सबसोनिक के लिए अपने दिल में बहुत प्यार करता हूं, मैं .NET 3.5 में काम करने की लक्जरी होने पर LINQ-to-SQL पर चला गया हूं। .NET 2.0 में, मैं अभी भी सबसोनिक का उपयोग करता हूं। तो मेरी नई आधिकारिक सलाह मंच संस्करण-निर्भर है। .NET 3+ के मामले में, स्वीकृत उत्तर के साथ जाएं। .NET 2.0 के मामले में, सबसोनिक के साथ जाएं।

1

मैंने कई परियोजनाओं के लिए टाइप किए गए डेटासेट का उपयोग किया है। वे डेटाबेस को अच्छी तरह से मॉडल करते हैं, क्लाइंट पक्ष पर बाधाओं को लागू करते हैं, और आम तौर पर एक ठोस डेटा एक्सेस तकनीक है, विशेष रूप से TableAdapters के साथ .NET 2.0 में परिवर्तन के साथ।

टाइप किए गए डेटासेट उन लोगों से एक बुरा रैप प्राप्त करते हैं जो उन्हें वर्णित करने के लिए "bloated" जैसे भावनात्मक शब्दों का उपयोग करना पसंद करते हैं। मैं अनुदान दूंगा कि मुझे डेटासेट्स का उपयोग करने से अधिक अच्छा ओ/आर मैपर का उपयोग करना पसंद है; यह टाइप किए गए डेटाटेबल्स, डेटारो इत्यादि के बजाय वस्तुओं और संग्रहों का उपयोग करने के लिए बेहतर "महसूस करता है" लेकिन मुझे जो मिला है वह यह है कि यदि किसी भी कारण से आप ओ/आर मैपर का उपयोग नहीं करना चाहते हैं, तो टाइप किया गया है डेटासेट्स एक अच्छी ठोस पसंद है जो उपयोग करने में काफी आसान है और आपको ओ/आर मैपर के 9 0% लाभ मिलेगा।

संपादित करें:

कुछ यहाँ का सुझाव है कि DataReaders "तेज" विकल्प हैं। लेकिन यदि आप DataAdapter (जो डेटाटेबल्स द्वारा भरे हुए हैं) के आंतरिक को देखने के लिए परावर्तक का उपयोग करते हैं, तो आप देखेंगे कि यह एक डेटा रीडर का उपयोग करता है। टाइप किए गए डेटासेट में अन्य विकल्पों की तुलना में एक बड़ी मेमोरी पदचिह्न हो सकती है, लेकिन मुझे अभी तक उस एप्लिकेशन को देखना नहीं है जहां यह एक वास्तविक अंतर बनाता है।

नौकरी के लिए सबसे अच्छा उपकरण का उपयोग करें। "सकल" या "ब्लोएटेड" जैसे भावनात्मक शब्दों के आधार पर अपना निर्णय न लें, जिसका कोई वास्तविक आधार नहीं है।

+0

मुझे यकीन नहीं है कि आपकी टिप्पणी मान्य है - डेटासेट को डेटाएडाप्टर के माध्यम से पॉप्युलेट किया जाता है जो डेटा रीडर का उपयोग करता है लेकिन डेटा कब उपलब्ध होता है? यदि आपको सभी पंक्तियों के पढ़ने तक पूरा करना है, तो निश्चित रूप से इसे धीमा होना चाहिए। –

+0

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

2

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

मैं Winforms में ADO.NET बाध्यकारी का उपयोग करता हूं और मैं कंसोल ऐप्स में कोड का भी उपयोग करता हूं। मैंने हाल ही में एक कस्टम डेवलपर बनाने के लिए एक और डेवलपर के साथ मिलकर काम किया है जिसे हमने एक पागल डाटामैडेल के खिलाफ इस्तेमाल किया था जिसे हमें ठेकेदारों से दिया गया था, जो हमारे सामान्य डेटा स्टोर की तरह कुछ नहीं दिखते थे।

मैंने आज एडीओ.NET के प्रतिस्थापन के लिए खोज की और मुझे कुछ भी नहीं दिख रहा है जिसे मैं वर्तमान में उपयोग करने के लिए सीखने के लिए गंभीरता से सीखने की कोशिश करूँगा।

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