अक्सर परिवर्तित डेटाबेस के लिए सर्वश्रेष्ठ .NET समाधान

मैं वर्तमान में एक छोटा सीआरयूडी आवेदक आर्किटेक्ट कर रहा हूं। उनका डेटाबेस एक बड़ी गड़बड़ है और अगले 6 महीनों के दौरान एक वर्ष में अक्सर बदल जाएगा। आप मेरी डेटा परत के लिए क्या अनुशंसा करेंगे:

1) ओआरएम (यदि हां, तो कौन सा?)

2) Linq2Sql

3) संग्रहीत प्रक्रियाओं

4) पैरामीट्रिज्ड क्वेरीज़

मुझे वास्तव में एक समाधान की आवश्यकता है जो पर्याप्त गतिशील (दोनों तेज़ और आसान) होगा जहां मैं तालिकाओं को प्रतिस्थापित कर सकता हूं और कॉलम को अक्सर जोड़/हटा सकता हूं।

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

0
ro fr bn

11 उत्तर

NHibernate, but only if you would be amenable to having an object-first approach wherein you define your classes, and then define your desired table structure in the mapping files, and then create a database schema using NHibernate's built in schema generation classes.

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

0
जोड़ा

यदि डेटाबेस स्कीमा अक्सर बदलता है, तो LINQ2SQL पर इकाई फ्रेमवर्क को प्राथमिकता दें। यदि स्कीमा बदलता है, तो एल 2 एस का उपयोग करके आपको
करना होगा 1) आपको तालिका को हटाएं और दोबारा जोड़ें (अपनी अनुकूलन खोना)
2) मॉडल को हाथ से संशोधित करें (जैसा कि यहां स्टैक ओवरफ्लो में किया गया है)

ईएफ एल 2 एस का एक सुपर-सेट है, जो आपको उपयोग और डीबीएमएस-आजादी की अधिक लचीलापन देता है

0
जोड़ा

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

यह संग्रहित प्रोसेस के साथ भी एक समस्या होगी।

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

0
जोड़ा
यदि आप linq2sql डिजाइनर के "ड्रैग और ड्रॉप" दृष्टिकोण का उपयोग करते हैं तो मुझे कोड को दोबारा प्रतिक्रिया देने में थोड़ा मुश्किल लगता है। हालांकि, फ्लुएंट एनएचबेर्नेट के साथ, यह हल करना बहुत आसान हो सकता है।
जोड़ा लेखक hangy, स्रोत
linq2sql का उपयोग करके आपके बच्चों पर अभिशाप लगाया जाएगा। आपका पूरा परिवार एक भयानक, डिजाइनर से उत्पन्न मौत मर जाएगा।
जोड़ा लेखक Andrew Bullock, स्रोत
Fluent NHibernate एकीकरण परीक्षण लिखना आसान बनाता है जो जांचना चाहिए कि आपके मैपिंग सही हैं या नहीं। आप इसे तेजी से बनाने के लिए इन-मेमोरी डेटाबेस का उपयोग कर सकते हैं।
जोड़ा लेखक Marek Blotny, स्रोत

मैं बिल्ड प्रदाता (वेबसाइट प्रोजेक्ट) सेटअप के साथ सबसोनिक को देखता हूं। यह बहुत अच्छा काम करता है क्योंकि जब भी आप अपनी प्रोजेक्ट बनाते हैं तो यह स्वचालित रूप से डीएएल ऑब्जेक्ट्स को पुन: उत्पन्न करता है, इसलिए यदि डेटाबेस आपके कोड को तोड़ने के तरीके में बदल जाता है, तो आपको एक बिल्ड त्रुटि मिलती है।

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

0
जोड़ा

आप संग्रहीत प्रोसेस से पहले ही खुश हैं और वे बदलते स्कीमा को दूर करने के लिए पर्याप्त हो सकते हैं। यदि ओआरएम संग्रहीत प्रोसेस से खुश नहीं हैं तो शायद वे उन दृश्यों के साथ काम करेंगे जो आप बदलते स्कीमा के शीर्ष पर चालू रखते हैं।

0
जोड़ा

अगर मैं आपके जूते में था तो मैं लिनक्स 2 एसक्यूएल के साथ जो कुछ जानता था (स्पॉक्स) का लाभ उठाने का प्रयास करता हूं। Linq2Sql अभी भी आपके sprocs का उपयोग कर सकते हैं लेकिन फिर आपके बेल्ट में एक नया टूल डालने का अतिरिक्त बोनस है। मुझे लगता है कि लिंक 2XXX पर एक समझ है (एक्स एक यादृच्छिक तकनीक है जो वयस्क मनोरंजन नहीं है .... जो अब मुझे बुरा विचार नहीं है कि मैं इसके बारे में सोचता हूं) वाक्यविन्यास और पद्धति आपके कौशल सेट के लिए एक बढ़िया जोड़ा होने जा रही है वस्तुओं के संग्रह पर Linq रास्ता मीठा है।

लेकिन आखिरकार एनएचबीर्नेट जैसी कुछ लंबी अवधि में आपको बेहतर लगेगी।

0
जोड़ा

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

0
जोड़ा

देखें कि यह क्यों बदल रहा है, और देखें कि क्या आप अपने आने वाले बदलावों की अपेक्षा कर सकते हैं और सामान्यीकृत कर सकते हैं ताकि वे आपका कोड न तोड़ सकें

एक ढांचा परिवर्तनों को आसान बना सकता है, लेकिन गहन विश्लेषण में दीर्घकालिक लाभ होगा

0
जोड़ा

आप निश्चित रूप से एक ओआरएम का उपयोग करना चाहते हैं। कोई भी ओआरएम ठीक है, लेकिन आप कुछ ऐसा चाहते हैं जो दृढ़ता से टाइप की गई कक्षाएं उत्पन्न करे। जब फ़ील्ड को किसी तालिका से जोड़ा, संशोधित या हटा दिया जाता है, तो आप उन वर्गों को पुन: उत्पन्न करने में सक्षम होना चाहते हैं, और फ़िक्सिंग संकलन समय त्रुटियों के साथ ही निपटने में सक्षम होना चाहते हैं। यदि आप गतिशील मॉडल का उपयोग करते हैं, तो आपके पास कई खराब रनटाइम त्रुटियां होने की संभावना है। यह बहुत महत्वपूर्ण है! मैं Sourceforge पर MyGeneration विकास टीम का हिस्सा हूं, और मुझे लगता है कि यह आपकी समस्या का एक बड़ा समाधान है। आप dOOdads, NHibernate, EasyObjects, EntitySpaces, आदि उत्पन्न कर सकते हैं। यदि आप अधिक महंगी समाधान के साथ जाना चाहते हैं, तो CodeSmith के साथ जाएं या LLBLGen Pro । शुभकामनाएं - MyGeneration का उपयोग करने में रुचि रखने वाले किसी भी व्यक्ति को प्रश्नों के साथ मुझसे संपर्क करने में संकोच न करें।

0
जोड़ा

EntitySpaces का उपयोग करें। तुम मुझे फूल भेजोगे, गारंटी दी। अद्भुत। जैसा आप चाहें डीबी बदलें। बटन हिट, बैंग। आपके सभी परिवर्तन किए गए हैं। अपने कस्टम कोड को बदलने के बिना। मुझे यह पसंद है।

0
जोड़ा

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

Here's how the new project dialog will look like this

0
जोड़ा