कोड-प्रथम बनाम मॉडल / डेटाबेस-पहला [बंद]


618

एंटिटी फ्रेमवर्क 4.1 कोड-फर्स्ट ओवर द मॉडल / डेटाबेस-ईएमडीएक्स आरेख के साथ उपयोग करने के पेशेवरों और विपक्ष क्या हैं?

मैं पूरी तरह से EF 4.1 का उपयोग करके डेटा एक्सेस लेयर के निर्माण के सभी दृष्टिकोणों को समझने की कोशिश कर रहा हूं। मैं रिपॉजिटरी पैटर्न और का उपयोग कर रहा हूं IoC

मुझे पता है कि मैं कोड-प्रथम दृष्टिकोण का उपयोग कर सकता हूं: मेरी संस्थाओं और संदर्भ को हाथ से परिभाषित करें और ModelBuilderस्कीमा को ठीक करने के लिए उपयोग करें।

मैं एक EDMXआरेख भी बना सकता हूं और एक कोड पीढ़ी चरण चुन सकता हूं जो समान POCOवर्ग उत्पन्न करने के लिए T4 टेम्पलेट्स का उपयोग करता है ।

दोनों ही मामलों में मैं POCOउस वस्तु के साथ समाप्त होता हूं जो ORMअज्ञेय और संदर्भ से है DbContext

डेटाबेस-फर्स्ट सबसे अधिक आकर्षक लगता है क्योंकि मैं एंटरप्राइज मैनेजर में डेटाबेस डिजाइन कर सकता हूं, जल्दी से मॉडल को सिंक कर सकता हूं और डिजाइनर का उपयोग करके इसे ठीक कर सकता हूं।

तो उन दो दृष्टिकोणों के बीच अंतर क्या है? क्या यह केवल VS2010 बनाम एंटरप्राइज मैनेजर की प्राथमिकता के बारे में है?


12
एंटिटी फ्रेमवर्क 7 ईडीएमएक्स
CAD

5
@ कैडब्लो एंटिटी फ्रेमवर्क 7 अब एंटिटी फ्रेमवर्क कोर 1.0
आरबीटी

6
किसी भी अन्य ब्राउज़रों के लिए, जब तक कि आपके पास 7000 लंबी एक्सएमएल फाइलों के लिए हार्डन न हो और पूर्वोक्त में मर्ज संघर्षों को हल करना हो, पहले कोड पर जाएं और खुद को सिरदर्द से बचाएं
Dan Pantry


4
बस दिए गए हर उत्तर के बारे में "I Think" ... "प्राइमली ओपिनियन बेस्ड" की पूर्ण परिभाषा है।
लंकिमार्ट

जवाबों:


703

मुझे लगता है कि अंतर हैं:

पहले कोड

  • बहुत लोकप्रिय है क्योंकि हार्डकोर प्रोग्रामर किसी भी प्रकार के डिजाइनरों को पसंद नहीं करते हैं और EDMX xml में मानचित्रण को परिभाषित करना बहुत जटिल है।
  • कोड पर पूर्ण नियंत्रण (कोई ऑटोजेनरेटेड कोड जो संशोधित करना कठिन है)।
  • सामान्य अपेक्षा यह है कि आप डीबी से परेशान न हों। DB बिना किसी तर्क के केवल एक भंडारण है। ईएफ निर्माण को संभालेगा और आप यह नहीं जानना चाहेंगे कि यह कैसे काम करता है।
  • डेटाबेस में मैन्युअल परिवर्तन संभवतः सबसे अधिक खो जाएगा क्योंकि आपका कोड डेटाबेस को परिभाषित करता है।

डेटाबेस पहले

  • बहुत लोकप्रिय है अगर आपके पास डीबीए द्वारा डिज़ाइन किया गया डीबी है, अलग से विकसित किया गया है या यदि आपके पास मौजूदा डीबी है।
  • आप EF को आपके लिए इकाइयाँ बनाने देंगे और मैपिंग के संशोधन के बाद आप POCO संस्थाएँ तैयार करेंगे।
  • यदि आप POCO संस्थाओं में अतिरिक्त सुविधाएँ चाहते हैं, तो आपको या तो T4 को संशोधित करना होगा या आंशिक कक्षाओं का उपयोग करना होगा।
  • डेटाबेस में मैन्युअल परिवर्तन संभव है क्योंकि डेटाबेस आपके डोमेन मॉडल को परिभाषित करता है। आप हमेशा डेटाबेस से मॉडल को अपडेट कर सकते हैं (यह फीचर काफी अच्छा काम करता है)।
  • मैं अक्सर वीएस डेटाबेस प्रोजेक्ट्स (केवल प्रीमियम और अल्टीमेट वर्जन) के साथ इसका उपयोग करता हूं।

पहले मॉडल

  • IMHO लोकप्रिय अगर आप डिजाइनर प्रशंसक हैं (= आपको कोड या एसक्यूएल लिखना पसंद नहीं है)।
  • आप अपने मॉडल को "ड्रा" करेंगे और वर्कफ़्लो को अपनी डेटाबेस स्क्रिप्ट और T4 टेम्प्लेट को अपने POCO संस्थाओं को उत्पन्न करने देंगे। आप अपनी संस्थाओं और डेटाबेस दोनों पर नियंत्रण का हिस्सा खो देंगे लेकिन छोटी आसान परियोजनाओं के लिए आप बहुत उत्पादक होंगे।
  • यदि आप POCO संस्थाओं में अतिरिक्त सुविधाएँ चाहते हैं, तो आपको या तो T4 को संशोधित करना होगा या आंशिक कक्षाओं का उपयोग करना होगा।
  • डेटाबेस में मैन्युअल परिवर्तन संभवतः सबसे अधिक खो जाएगा क्योंकि आपका मॉडल डेटाबेस को परिभाषित करता है। यह बेहतर काम करता है यदि आपके पास डेटाबेस उत्पादन पैक स्थापित है। यह आपको वीएस में डेटाबेस स्कीमा (फिर से बनाने के बजाय) या डेटाबेस परियोजनाओं को अपडेट करने की अनुमति देगा।

मुझे उम्मीद है कि EF 4.1 के मामले में पहले कोड बनाम मॉडल / डेटाबेस से संबंधित कई अन्य विशेषताएं हैं। पहले कोड में प्रयुक्त धाराप्रवाह एपीआई ईडीएमएक्स की सभी विशेषताओं की पेशकश नहीं करता है। मुझे उम्मीद है कि पहले मॉडल / डेटाबेस का उपयोग करते समय संग्रहित प्रक्रिया मैपिंग, क्वेरी व्यूज, डिफाइनिंग व्यूज आदि जैसे फीचर्स काम करते हैं और DbContext(मैंने अभी तक इसकी कोशिश नहीं की है) लेकिन वे पहले कोड में नहीं हैं।


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

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

9
हाई वॉल्यूम सलेक्ट स्टेटमेंट्स से आपका क्या तात्पर्य है? संग्रहीत प्रक्रियाएं तेज़ नहीं होती हैं, तो चयन आवेदन से भेजते हैं।
पियोट्र पर्क

20
आप कर सकते हैं अपने आवेदन में एसक्यूएल की है। एसक्यूएल संभावना से अधिक संकलित कोड में एम्बेड किया जाएगा, और किसी भी परिवर्तन को एक recompile और redep तैनाती की आवश्यकता होगी जबकि एक संग्रहीत कार्यविधि परिवर्तन बस संग्रहीत कार्यविधि के संपादन की आवश्यकता होगी। ग्राहक / ग्राहक / उपयोगकर्ता इस मामले में परिवर्तन से कम प्रभावित होंगे।
कोडविअर

5
@JakubKonecki, जो कुछ भी आपको नहीं मिलता है वह बस उपयोग DbContextमें मौजूद है । ObjectContext((IObjectContextAdapter)dbcontext).ObjectContext
बजे शिमी वेइटहैंडलर

134

मुझे लगता है कि "प्रोग्रामिंग एंटिटी फ्रेमवर्क" के लेखक जूली लर्मन के इस सरल "निर्णय पेड़" को अधिक अनुमान के साथ निर्णय लेने में मदद करनी चाहिए:

ईएफ के साथ विभिन्न दृष्टिकोणों को चुनने में मदद करने के लिए एक निर्णय पेड़

अधिक जानकारी यहाँ


111
यह पूरा नहीं है। क्या होगा यदि आप एक दृश्य डिजाइनर का उपयोग नहीं करना चाहते हैं, लेकिन आपके पास एक मौजूदा डेटाबेस है?
डेव न्यू

14
इससे भी बदतर ... वास्तविक जीवन के फैसले कोड-प्रथम का उपयोग करते समय आपके द्वारा तकनीकी सीमाओं के बजाय आरेखों द्वारा नहीं किए जाते हैं, उदाहरण के लिए, आप एक फ़ील्ड पर एक अद्वितीय सूचकांक नहीं बना सकते हैं या आप इसके लिए किसी ट्री टेबल में पदानुक्रमित डेटा नहीं हटा सकते हैं संदर्भ का उपयोग कर एक सीटीई की आवश्यकता है ।able.SqlQuery ("चयन करें ...")। मॉडल / डेटाबेस में पहले ये कमियां नहीं होती हैं।
एलिजाबेथ

32
@davenewza यह पहला रास्ता नहीं है?
क्रिस एस

3
@davenewza मौजूदा डेटाबेस => मौजूदा कक्षाएं? कोड फर्स्ट: डाटाबेस फर्स्ट :)
रियाध गोमरी

4
@davenewza DB से अपने POCO वर्गों को बनाने के लिए इकाई ढांचे Powertools का उपयोग करें। मौजूदा डेटाबेस के लिए कोड पहले
इमान महमूदीनसाब

50

डेटाबेस पहले और मॉडल में पहले कोई वास्तविक अंतर नहीं है। उत्पन्न कोड समान हैं और आप इस दृष्टिकोण को जोड़ सकते हैं। उदाहरण के लिए, आप डिज़ाइनर का उपयोग करके डेटाबेस बना सकते हैं, क्योंकि आप sql स्क्रिप्ट का उपयोग करके डेटाबेस को बदल सकते हैं और अपने मॉडल को अपडेट कर सकते हैं।

जब आप पहली बार कोड का उपयोग कर रहे हैं तो आप मनोरंजन डेटाबेस के बिना मॉडल को बदल नहीं सकते हैं और सभी डेटा खो सकते हैं। IMHO, यह सीमा बहुत सख्त है और उत्पादन में पहले कोड का उपयोग करने की अनुमति नहीं देता है। अभी के लिए यह वास्तव में प्रयोग करने योग्य नहीं है।

पहले कोड का दूसरा मामूली नुकसान यह है कि मॉडल बिल्डर को मास्टर डेटाबेस पर विशेषाधिकारों की आवश्यकता होती है। यदि आप SQL सर्वर कॉम्पैक्ट डेटाबेस का उपयोग करते हैं या यदि आप डेटाबेस सर्वर को नियंत्रित करते हैं तो यह आपको प्रभावित नहीं करता है।

पहले कोड का लाभ बहुत साफ और सरल कोड है। आपके पास इस कोड का पूर्ण नियंत्रण है और इसे आसानी से संशोधित कर सकते हैं और इसे अपने दृश्य मॉडल के रूप में उपयोग कर सकते हैं।

जब आप उत्पादन में संशोधन की आवश्यकता होती है, तो पहले संस्करण और मॉडल \ डेटाबेस का उपयोग किए बिना सरल स्टैंडअलोन एप्लिकेशन बनाते समय मैं कोड पहले दृष्टिकोण का उपयोग करने की सिफारिश कर सकता हूं।


7
यदि आप SQL स्क्रिप्ट के साथ उत्पादन वातावरण को मैन्युअल रूप से अद्यतन करने जा रहे हैं, तो आप अभी भी कोड प्रथम के साथ भी ऐसा कर सकते हैं। आप केवल आवश्यकतानुसार परिवर्तन स्क्रिप्ट उत्पन्न करते हैं। कई उपकरण इन डेल्टास को स्वचालित कर सकते हैं, और आप कोड फर्स्ट का उपयोग कर सकते हैं। आपको बस कोड First initializer को कुछ बनाने की आवश्यकता होगी जैसे CreateDatabaseIfNotExists, ताकि वर्तमान डेटाबेस को नष्ट न किया जा सके।
एस्टेबन ब्रेनस

कुछ अंतर विचारों को आयात कर रहे हैं फिर डेटाबेस को पुनर्जीवित कर रहे हैं जहां दृश्य तालिका बन जाते हैं। यह एक नया DB जीन के लिए कठिन बनाता है और अगर यह सिंक में देखने के लिए ठेस DB की तुलना करें।
डेव

मॉडल फ़र्स्ट यूज़र-डिफ़ाइंड SQL फ़ंक्शंस का समर्थन नहीं करता है (कम से कम EF4 में, पता नहीं कि यह बदल गया है)। डेटाबेस पहले के साथ, आप यूडीएफ आयात कर सकते हैं और उन्हें अपने LINQ प्रश्नों में उपयोग कर सकते हैं।
त्सही अशेर

कोई मतभेद नहीं? दृश्य और SimpleMembership तालिकाओं को आयात करने का प्रयास करें और फिर मॉडल से डेटाबेस उत्पन्न करें और देखें कि आपको क्या मिलता है। आस - पास भी नहीं! इन्हें दौर का दौरा करना चाहिए, लेकिन फिर MSFT ने CF के बदले मूल रूप से MF और DF को छोड़ दिया है जो विचारों और संग्रहित procs के उपयोग के मामले में भी अधूरा है।
डेव

आप कोड पहले माइग्रेशन आधारित डेटाबेस मनोरंजन प्रक्रिया को अक्षम कर सकते हैं और इसे मैन्युअल रूप से मॉडल और डेटाबेस में कर सकते हैं। आप अपने वेब / app.config में <EntityFramework> ..... <contexts> <संदर्भ प्रकार = "myNamespace.mydbConcxtxt", "myassemblyORProject" "disableDatabaseInitialization =" true "/> पर अपने वेब / app.config में निर्दिष्ट करके ऐसा कर सकते हैं। </ EntityFramework> आप माइग्रेशन फ़ोल्डर को हटा सकते हैं।
Hasteq

37

Http://www.itworld.com/development/405005/3-reasons-use-code-first-design-entity-framework से संबंधित भागों का हवाला देते हुए

एंटिटी फ्रेमवर्क के साथ कोड पहले डिज़ाइन का उपयोग करने के 3 कारण

1) कम cruft, कम ब्लोट

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

कोड के साथ पहले आपके हाथ से कोड किए गए मॉडल आपके डेटाबेस बन जाते हैं। आपके द्वारा बनाई जा रही सटीक फ़ाइलें डेटाबेस डिज़ाइन को उत्पन्न करती हैं। कोई अतिरिक्त फ़ाइलें नहीं हैं और जब आप संपत्तियों को जोड़ना चाहते हैं या जो कुछ भी डेटाबेस के बारे में जानने की आवश्यकता नहीं है, तो एक क्लास एक्सटेंशन बनाने की आवश्यकता नहीं है। जब तक आप उचित वाक्यविन्यास का पालन करते हैं, तब तक आप उन्हें उसी कक्षा में जोड़ सकते हैं। बिल्ली, यदि आप चाहते हैं तो अपने कोड की कल्पना करने के लिए आप एक Model.edmx फ़ाइल भी बना सकते हैं।

2) ग्रेटर कंट्रोल

जब आप पहले DB जाते हैं, तो आप अपने आवेदन में उपयोग के लिए अपने मॉडल के लिए जो कुछ भी उत्पन्न करते हैं उसकी दया पर होते हैं। कभी-कभी नामकरण सम्मेलन अवांछनीय होता है। कभी-कभी रिश्ते और संगठन आप जो चाहते हैं वह काफी नहीं होते हैं। अन्य समय में आपके एपीआई प्रतिक्रियाओं पर आलसी लोडिंग व्रक के साथ गैर क्षणिक संबंध।

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

3) डेटाबेस संस्करण नियंत्रण

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

जब आप पहली बार माइग्रेशन सक्षम करते हैं, तो एक कॉन्फ़िगरेशन क्लास और एक प्रारंभिक माइग्रेशन उत्पन्न होता है। प्रारंभिक माइग्रेशन आपका वर्तमान स्कीमा या आपकी आधार रेखा v1.0 है। उस बिंदु से आप उन माइग्रेशन को जोड़ देंगे जो संस्करणों के क्रम के साथ मदद करने के लिए एक विवरणक के साथ टाइमस्टैम्प और लेबल किए जाते हैं। जब आप पैकेज मैनेजर से ऐड-माइग्रेशन कहते हैं, तो एक नई माइग्रेशन फ़ाइल एक सब कुछ उत्पन्न करेगी जो आपके कोड मॉडल में एक यूपी () और DOWN () फ़ंक्शन दोनों में स्वचालित रूप से बदल गई है। UP फ़ंक्शन डेटाबेस में परिवर्तन लागू करता है, DOWN फ़ंक्शन उन घटनाओं में वही परिवर्तन हटा देता है जिन्हें आप रोलबैक करना चाहते हैं। क्या अधिक है, आप इन बदलाव फ़ाइलों को संपादित कर सकते हैं अतिरिक्त परिवर्तन जैसे कि नए विचार, अनुक्रमणिका, संग्रहीत कार्यविधियाँ, और जो भी हो। वे आपके डेटाबेस स्कीमा के लिए एक सच्चे संस्करण प्रणाली बन जाएंगे।


31

कोड-प्रथम उभरता हुआ तारा प्रतीत होता है। मुझे रूबी ऑन रेल्स पर एक त्वरित नजर थी, और उनका मानक कोड-प्रथम है, डेटाबेस माइग्रेशन के साथ।

यदि आप एक MVC3 एप्लिकेशन बना रहे हैं, तो मेरा मानना ​​है कि कोड में पहले निम्नलिखित फायदे हैं:

  • आसान विशेषता सजावट - आप सत्यापन, आवश्यकता, आदि के साथ खेतों को सजा सकते हैं। विशेषताएँ, यह ईएफ मॉडलिंग के साथ काफी अजीब है
  • मॉडलिंग की कोई त्रुटि नहीं - EF मॉडलिंग में अक्सर अजीब त्रुटियां होती हैं, जैसे कि जब आप एसोसिएशन की संपत्ति का नाम बदलने की कोशिश करते हैं, तो इसे अंतर्निहित मेटा-डेटा से मिलान करने की आवश्यकता होती है - बहुत अनम्य।
  • मर्ज करने के लिए अजीब नहीं है - जब कोड संस्करण नियंत्रण उपकरण जैसे मर्क्यूरियल, मर्जिंग .edmx फ़ाइलों का उपयोग करना एक दर्द है। आप एक प्रोग्रामर हैं जो C # का उपयोग करते हैं, और वहां आप एक .edmx को मर्ज कर रहे हैं। कोड-प्रथम के साथ ऐसा नहीं है।
  • पहले कोड के विपरीत और आपके पास निपटने के लिए सभी छिपी हुई जटिलताओं और अज्ञात के बिना पूर्ण नियंत्रण है।
  • मैं आपको पैकेज मैनेजर कमांड लाइन टूल का उपयोग करने की सलाह देता हूं, मचान के विचारों में एक नया नियंत्रक जोड़ने के लिए ग्राफिकल टूल का भी उपयोग नहीं करता।
  • DB-Migrations - फिर आप Enable-Migrations भी कर सकते हैं। यह इतना शक्तिशाली है। आप कोड में अपने मॉडल में परिवर्तन करते हैं, और फिर ढांचा स्कीमा परिवर्तनों का ट्रैक रख सकता है, इसलिए आप सहजता से अपग्रेड को तैनात कर सकते हैं, स्कीमा संस्करणों के साथ स्वचालित रूप से अपग्रेड किया जाता है (और यदि आवश्यक हो तो डाउनग्रेड किया गया)। (निश्चित नहीं, लेकिन यह शायद मॉडल के साथ काम करता है-पहले भी)

अपडेट करें

प्रश्न कोड-प्रथम की तुलना EDMX मॉडल / db-प्रथम से भी करता है। कोड-प्रथम का उपयोग इन दोनों दृष्टिकोणों के लिए भी किया जा सकता है:


3
मॉडल-फर्स्ट POCO को कोडिंग नहीं कर रहा है, यह कोड फर्स्ट है, मॉडल-फर्स्ट एक विजुअल डिजाइनर है जो POCO को ऑटोमैटिक जनरेट करता है और उसके बाद मॉडल से डेटाबेस जेनरेट करता है।
डिएगो मेंड्स

इन दिनों दृश्य और कोड दोनों मार्गों में, आप पहले या तो "मॉडल" या "डेटाबेस" कर सकते हैं। पहला मैनुअल डिज़ाइन (या तो कोड या विज़ुअल एडिटर के माध्यम से) है, दूसरा डेटाबेस बना रहा है और मॉडल (या तो POCO या EDMX) बना रहा है।
टोड

11

डेटाबेस कॉन्फ़िगरेशन पर अधिक लचीलापन और नियंत्रण प्रदान करने के लिए मैं पहले EF डेटाबेस का उपयोग करता हूं।

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

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

मॉडल पहले लगता है कि बहुत सारी क्षमता है, लेकिन मुझे जटिल डेटाबेस स्कीमा रीफैक्टरिंग के दौरान बहुत सारे कीड़े दे रहे हैं। यकीन नहीं है कि क्यों।


4
आप पहली बार कोड का उपयोग कर मिश्रित कुंजियों को परिभाषित कर सकते हैं - stackoverflow.com/questions/5466374/…
Jakub Konecki

3
भविष्य के पाठकों के लिए, अब ऐसा नहीं है, आप ईटीएस फर्स्ट में इंडेक्स, मल्टी-कॉलम प्राथमिक कुंजी, और इस तरह की चीजें जोड़ सकते हैं।
तोबियाक777

1
ईएफ को तय किया जाना चाहिए ताकि सभी 3 दृष्टिकोणों को एक ही डेटाबेस पर परस्पर उपयोग किया जा सके क्योंकि सभी 3 दृष्टिकोणों के लिए फायदे और नुकसान हैं
डेव

इसके अतिरिक्त, आदर्श आईडी फर्स्ट सॉल्यूशन की सच्चाई मैं पहले डेटाबेस का उपयोग कर रहा हूं क्योंकि भविष्य में अन्य आईडीई / भाषा के लिए माइग्रेशन हो रहा है और मैं डेटाबेस संरचना को ठोस और एकीकृत करना चाहता हूं, एक और तथ्य जिसे मैं पसंद करता हूं वह है डेटाबेस पहले किसी भी हिस्से को बदलने पर लचीलापन है। आधार सामग्री भंडारण।
QMaster

7

SP1 से पहले बड़े मॉडलों के साथ काम करना बहुत धीमा था, (SP1 के बाद इसे आज़माया नहीं गया है, लेकिन यह कहा जाता है कि यह अब एक तस्वीर है)।

मैं अभी भी अपनी तालिका पहले डिजाइन करता हूं, फिर एक घर में निर्मित उपकरण मेरे लिए POCOs उत्पन्न करता है, इसलिए यह प्रत्येक पोको ऑब्जेक्ट के लिए दोहराए जाने वाले कार्यों को करने का भार उठाता है।

जब आप स्रोत नियंत्रण प्रणालियों का उपयोग कर रहे हैं, तो आप आसानी से अपने POCOs के इतिहास का पालन कर सकते हैं, यह डिज़ाइनर जनरेटेड कोड के साथ इतना आसान नहीं है।

मेरे पास अपने POCO के लिए एक आधार है, जो बहुत सारी चीजों को काफी आसान बनाता है।

मेरी सभी तालिकाओं के लिए मेरे विचार हैं, प्रत्येक आधार दृश्य मेरी विदेशी कुंजियों के लिए बुनियादी जानकारी लाता है और मेरे विचार POCOs मेरे POCO वर्गों से प्राप्त होते हैं, जो फिर से काफी उपयोगी है।

और अंत में मैं डिजाइनरों की तरह नहीं है।


8
'जब आप स्रोत नियंत्रण प्रणालियों का उपयोग कर रहे हैं, तो आप आसानी से अपने POCOs के इतिहास का पालन कर सकते हैं, यह डिज़ाइनर जनरेटेड कोड के साथ इतना आसान नहीं है।' - मैं डिज़ाइनर जनरेटेड कोड को सोर्स कंट्रोल में रखता हूं, इसलिए मैं हमेशा इतिहास देख सकता हूं।
जैकब कोनकी

1
@JakubKonecki क्या आपने कभी 3+ लोगों की टीम में EDMX फ़ाइलों को मर्ज करने की कोशिश की? यह सिर्फ एक दर्द है ... इसके बजाय लोग विलय से बचने की कोशिश करते हैं और सिर्फ दूसरे संशोधन करते हैं और अपने स्वयं के बदलावों को दोहराते हैं, क्योंकि एक्सएमएल के हजारों लाइनों के साथ ऑटो उत्पन्न फ़ाइल में विलय का खतरा है।
bytecode77

6

डेटाबेस पहला दृष्टिकोण उदाहरण:

कोई भी कोड लिखे बिना: ASP.NET MVC / MVC3 डेटाबेस पहले दृष्टिकोण / डेटाबेस पहले

और मुझे लगता है कि यह अन्य दृष्टिकोणों से बेहतर है क्योंकि इस दृष्टिकोण के साथ डेटा हानि कम है।


क्या आप डीबी प्रथम दृष्टिकोण के साथ 'कम डेटा हानि' होने पर विस्तार से बता सकते हैं? यदि आप मौजूदा तालिका को दो में विभाजित करते हैं तो आप डेटा परिवर्तन कैसे करेंगे?
जैकब कोनकी

आप शायद एक एसक्यूएल स्क्रिप्ट लिखेंगे जो परिवर्तन के बारे में ध्यान रखती है। आम तौर पर, एमएस ने अपने नए संस्करण के साथ कोड फर्स्ट डेटा माइग्रेशन में सुधार करने की घोषणा की, इसलिए यह भविष्य में एक तर्क नहीं हो सकता है।
ckonig

पहले डेटाबेस के साथ समस्या यह है कि डेटाबेस डिजाइन में आमतौर पर दोषपूर्ण सार होता है जो आपके मॉडल में लीक हो जाता है ... जंक्शन टेबल, आदि डेटाबेस का काम बस आपके मॉडल को बनाए रखना है।
Nerdfest

यह "उत्तर" आपके तर्क के बिना मांस के आधार पर एक राय है, एक वाक्य एक रुख नहीं करता है।
ट्रैविसो

क्या आप डीबी प्रथम दृष्टिकोण के साथ 'कम डेटा हानि' होने पर विस्तार से बता सकते हैं?
अमल 50

4

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

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


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

0

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.