2012-04-05 2 views
8

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

का उपयोग कर मेरे उपकरण अब तक

  • ASP.NET MVC हैं 3
  • इकाई की रूपरेखा 4.3
  • Ninject 3

सभी ठीक चल रहा है, लेकिन मैं कुछ कर रहा हूँ खोजने एंटीटी फ्रेमवर्क कोड के साथ चीजें थोड़ा सा स्केची।

उदाहरण के लिए, मुझे पहले सेटअप के हिस्से के रूप में सदस्यता जानकारी सेट अप करने के लिए http://codefirstmembership.codeplex.com/ का उपयोग करना पड़ा। यह कुछ तीसरी पार्टी का उपयोग करने के लिए थोड़ा रोपी लगता है। जाहिर है, मुझे "खुद को रोल करने" के लिए पर्याप्त 1337 होना चाहिए, लेकिन मैं जाने से बहुत ज्यादा कटौती नहीं करना चाहता हूं। Aspnet_regsql चलाना भयानक लगता है, और प्रत्येक डीबी अपडेट के साथ खो जाएगा। वैसे भी, यह सब उपरोक्त पुस्तकालय के साथ काम कर रहा है और यह बहुत बुरा नहीं है। लगता है कि मचान टूट गया है।

अब यह सब से परे, अब ऐसा लगता है कि जब मैं लाइव वातावरण में दौड़ रहा हूं तो यह सामान प्रोबैमैटिक बनने जा रहा है। कोई भी स्कीमा परिवर्तन जो मैं dev db और live db के बीच बनाना चाहता हूं, उसे मैन्युअल रूप से स्क्रिप्ट के साथ प्रबंधित करना होगा, इसलिए उस बिंदु पर मैं पहले कोड का बिंदु नहीं खो रहा हूं?

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

तो अब मैं सोच रहा हूं। डेटाबेस पहले क्यों नहीं जाते? मैं linq2sql के साथ 3 साल के लिए काम कर रहा हूं और पहले डीबी जाने के साथ बहुत सहज हूं। यद्यपि टीबीएच मेरा डीबी स्रोत नियंत्रण स्ट्रेटर्जी थोड़ा कम रहा है .... कमी। तो मैं उम्मीद कर रहा था कि कोड पहले उस स्थिति को बेहतर बनाने के लिए लागू करेगा, लेकिन यह वास्तव में मुझे महसूस करता है कि मुझे पहले डीबी जाना चाहिए, और इसे नियंत्रण में रखने के बारे में सख्त होना चाहिए।

मैं वास्तव में इस तरह की स्थिति पर किसी भी विचार की सराहना करता हूं, और यह भी निहिनेट का उपयोग करने की तुलना कैसे करता है?

+0

में मदद करता है आप एक विशेष डीबी आप RavenDB की तरह कुछ को देखने के लिए चाहते हो सकता है से बंधा नहीं कर रहे हैं। –

+0

मैं वास्तव में एमएसएसएलएल का उपयोग करने के विपरीत नहीं हूं, हम इसके बिट्स माइग्रेट करने में सक्षम होना चाहिए, इसलिए हम मानक संस्करण का उपयोग करके स्केल कर सकते हैं, जो ईसी 2 अपेक्षाकृत सभ्य दर पर समर्थन करता है। शायद रेवेन से पहले मोंगो या सोफे को देखेंगे, रेवेन के लिए पहले जाने का कोई कारण? –

+1

विचार करने की एक बात यह है कि आप पहले कोड से बाहर निकलना चाहते हैं। क्या आप वास्तव में कोड में अपनी तालिकाओं को परिभाषित करने जा रहे हैं और यह डेटाबेस बनाते हैं, या यह ईएफ 4.3 का पॉको पहलू है जिसे आप चाहते हैं? कारण मैं पूछता हूं कि आप डाटाबेस फर्स्ट या मॉडल फर्स्ट के साथ पीओसीओ और डीबीकॉन्टेक्स्ट का उपयोग कर सकते हैं (आप अपने मॉडल से पीओसीओ जेन के लिए एक कस्टम टी 4 बना सकते हैं)। कारण मैं पूछता हूं क्योंकि मैं कभी-कभी लोगों को "कोड पहले" के बारे में लिखता हूं, जब वह चीज़ जो वास्तव में पीओसीओ/डीबीकॉन्टेक्स्ट के साथ काम करने के बाद होती है। – JMarsch

उत्तर

7

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

चेक आउट: https://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-automatic-migrations-walkthrough.aspx?Redirected=true

चेक आउट: http://coding.abel.nu/tag/ef-migrations/

+0

उस ब्लॉग से टिप्पणी –

+0

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

+0

डीबीए की नौकरी करने के लिए स्वचालित उपकरण का उपयोग करना हमेशा नुकसान होता है। – jessehouwing

3

बस इस पर मेरी ले ...

आप बनाने के लिए की जरूरत नहीं है अच्छे के लिए एक विकल्प -

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

आप इसका उपयोग प्रोटोटाइप चीजों और स्टार्टअप के लिए कर सकते हैं - अपनी सी # संरचना को जगह में और सिंक में तेजी से प्राप्त करें - फिर इसे बाद में आकार दें - या एक बार निश्चित उपयोग करें 'मौजूदा प्रारंभकर्ता का उपयोग करें' जो कोड से कुछ भी नहीं करता है और सब कुछ ले जाता है डीबी पक्ष और आपके डीबीए के लिए।

आईएमओ, आप वास्तव में सीएफ को बंद करने और डीबी से काम करने की आवश्यकता से पहले, इस अर्थ में 'बहुत दूर' जा सकते हैं।

बड़े डेटाबेस या कॉर्पोरेट वातावरण के लिए, यह निश्चित रूप से नौकरी के लिए सही उपकरण नहीं है।

मुझे लगता है कि अब उत्पादन के लिए सुरक्षित है - लेकिन क्या आप सुरक्षित, कुछ बातों पर विचार पर निर्भर करता है ...

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

... नकारात्मक पक्ष पर - मैंने कोड के पहले दृष्टिकोण (ईएफ और अन्यथा) के साथ कुछ जटिल जटिल परिदृश्यों का काम किया था। हालांकि, कुछ चीजें मुझे ईएफ के साथ वापस रखती हैं (आपने जो बताया है उसके शीर्ष पर) ...

यूडीएफ समर्थन, विचार (linq के साथ - जैसे कि आप LINQ का उपयोग नहीं करना चाहते हैं 'बड़े' पेशेवरों में से एक चला गया है) - जो ईएफ 5.0 में आना चाहिए (मैंने जांच नहीं की थी, लेकिन यह वही है जो वे प्रस्तावित कर रहे हैं) - क्योंकि अधिक जटिल परिदृश्यों के लिए आपको SQL पक्ष पर अनुकूलित करने की आवश्यकता है (या पीछे की ओर कस्टम क्वेरी निष्पादित करने में सक्षम होना चाहिए और फिर वापस नक्शा, यानी उस तरफ अधिक लचीलापन)। तो यह एक आशाजनक बात है अगर यह आता है (हालांकि मैं बिल्कुल सही नहीं होगा)। (प्लस तरफ, आप वास्तव में कस्टम क्वेरी चला सकते हैं और फिर अपनी ऑब्जेक्ट्स पर मैप कर सकते हैं - लेकिन उस तरह के काम, और आप सब कुछ नहीं कर सकते हैं, इसलिए यह एक तरह से सीमित है)

अधिक मांग वाले भारी मांग के लिए प्रश्नों के साथ प्रदर्शन कर्तव्य परिदृश्य - यह मेरी मुख्य समस्या थी। यह भी ईएफ 5.0 में बेहतर आने का वादा किया गया है - ताकि प्रतीक्षा करें और देखें।

यह कहकर कि -
मेरा पसंदीदा समाधान या ओआरएम जैसे पहले एक कस्टम या ओपन सोर्स कोड है - जहां आप अधिक चीजें नियंत्रण में रख सकते हैं। अभी भी कई प्रदाताओं का समर्थन आदि है जो 'आधिकारिक' या एमएस कार्यान्वयन को लंबे समय तक अधिक व्यवहार्य बनाता है।

आशा है कि यह किसी भी

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

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