2009-10-22 10 views
15

मैं NHibernate चारों ओर मेरी कार्यप्रवाह और एक अपेक्षाकृत बार-बार बदलती स्कीमा परिशोधित करने का तरीका सबसे अच्छा इस से निपटने के लिए देख रहा हूँ, और - मैं उत्पादन प्रणाली को लागू करने के लिए एक ही समाधान चाहते हैं, तो मुझे लगता है मैं एक की जरूरत है स्कीमा अपडेट की बजाय माइग्रेशन इंजन।nhibernate + माइग्रेशन कार्यप्रवाह

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

धन्यवाद, क्रिस

उत्तर

1

मैं इन migration tools for .net के किसी भी अपने आप उपयोग नहीं किया है, लेकिन जब बाहर कुछ साल पहले अपने खाली समय पर पर रूबी की कोशिश कर रहा है, मैं टी एसक्यूएल की तुलना में माइग्रेशन के लाभ देखा स्क्रिप्ट्स जो हम उस समय मेरे काम पर इस्तेमाल करते थे।

+0

धन्यवाद, फिर भी मेरे सवाल का अधिक चारों ओर कार्यप्रवाह न कि जो उपकरण उपलब्ध हैं एक ... – Chris

1

हाल ही में एक परियोजना में मैं कर दिया गया है, हम पता चला है है कि प्रवास करते हैं, VCS शाखाओं और NHibernate कई सिर दर्द और कमियां रास्ते पैदा कर सकता है के साथ संयुक्त।

हम क्या कुछ डेटा लोड हो रहा है के साथ (विकास के वातावरण के लिए) प्रत्येक स्वचालित निर्माण के साथ स्कीमा उत्पन्न करने के लिए NHibernate स्थापित करने के लिए किया गया था।

उत्पादन वातावरण के लिए, हम एक स्क्रिप्ट है कि वर्तमान स्कीमा और वांछित स्कीमा के आधार पर, यह आवश्यक क्षेत्रों और संशोधनों के साथ एक माइग्रेशन उत्पन्न किया था।

+1

आप इस देव-टू-उत्पादन स्क्रिप्ट की पीढ़ी को स्वचालित था की तुलना में अनुकूलन के किया गया था? –

0

हम SQL Compare का उपयोग करते हैं। यह निवेश के लिए भुगतान किया जाता है लेकिन निवेश imho के लायक है। प्रत्येक जेनरेट की गई स्क्रिप्ट को व्यवस्थित रखें - यानी टाइमस्टैम्प - और आप किसी भी रिलीज़ किए गए संस्करणों के लिए डेटाबेस उत्पन्न करने का एक अच्छा तरीका प्राप्त करते हैं।

यह हमारी सामान्य प्रवाह

  1. देव के दौरान हम दो डेटाबेस "ProjectName" और "ProjectName_TEST" है।
  2. प्रत्येक स्कीमा परिवर्तन के लिए हम एक ब्रांड नए डेटाबेस (NHNernate) उत्पन्न करते हैं और "ProjectName_TEST" को प्रतिस्थापित करते हैं।
  3. हम "प्रोजेक्टनाम" अपडेट करने के लिए एसक्यूएल तुलना का उपयोग करते हैं (इसलिए इसमें सभी देव डेटा रखते हैं)
  4. रिलीज पर, हम उत्पादन डेटाबेस के साथ "ProjectName_TEST" की तुलना करते हैं और एक अद्यतन स्क्रिप्ट उत्पन्न करते हैं।

command line options पर एक नज़र डालें क्योंकि वे वीएस बिल्ड इवेंट्स के माध्यम से प्रक्रिया को स्वचालित करने के लिए काफी आसान हैं। आपके सुझाव के लिए