2010-10-27 12 views
9

एक ओआरएम (विशेष रूप से एनएचबेर्नेट) का उपयोग करते समय, डेटा को संभालने का तरीका कैसा है? मेरा मतलब है, यदि डेटा ऑब्जेक्ट्स इस तरह बदलते हैं कि अंतर्निहित रिलेशनल डीबी स्कीमा में परिवर्तन होता है, तो क्या ओआरएम डीबी में स्कीमा अपग्रेड/डाउनग्रेड में कोई मदद प्रदान करता है? मौजूदा डेटा के नए स्कीमा में माइग्रेशन के बारे में कैसे?एनएचबेर्नेट, ओआरएम: कैसे रिफैक्टरिंग संभाला जा रहा है? मौजूदा डेटा?

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

उत्तर

16

एनएचबेर्नेट में, आप स्कीमा अपडेट क्लास का उपयोग अपनी स्कीमा में योजक परिवर्तन करने के लिए कर सकते हैं। (योजक परिवर्तनों में नई टेबल, नए कॉलम इत्यादि शामिल होंगे, लेकिन हटाए नहीं जाएंगे।) SchemaUpdate विकास उद्देश्यों के लिए है और उत्पादन में भाग लेने का इरादा नहीं है। मैं दृढ़ता से एक SQL माइग्रेशन टूल जैसे टारनटिनो, dbdeploy.net, रिकमिग्रेशन, या इसी तरह की जांच करने की अनुशंसा करता हूं।

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

// SchemaUpdate.Execute(bool script, bool doUpdate) 
new SchemaUpdate(cfg).Execute(true, false); 

और फिर स्वाद के लिए संपादित। या आप NHibernate के SchemaExport का उपयोग करके एक स्कीमा डिफ टूल का उपयोग कर सकते हैं और अतिरिक्त मेयो संस्करण (उर्फ डेटाड्यूड) या रेडगेट एसक्यूएल तुलना के साथ डेटाबेस पेशेवरों के लिए माइक्रोसॉफ्ट विजुअल स्टूडियो जैसे माइक्रोसॉफ्ट विजुअल स्टूडियो का उपयोग कर सकते हैं। आपको रूपांतरण स्क्रिप्ट को हाथ से लिखना होगा क्योंकि एसक्यूएल माइग्रेशन टूल के लिए सामान्य रूप से कोई तरीका नहीं है कि टी/एफ से भरा फू चार (1) कॉलम उस बार बिट कॉलम में परिवर्तित होना चाहिए।

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

+0

+1 एक उत्कृष्ट उत्तर के लिए। –

+0

यह एक शानदार है। इसके बारे में और संसाधन/ब्लॉग के लिंक देखने के लिए बहुत अच्छा होगा। – syclee

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