ठीक है, इसलिए कल मैंने अपने नवीनतम छोटे प्रोजेक्ट के साथ काम करने के लिए एनएचबीर्नेट और फ़्लुएंट हाइबरनेट के नवीनतम ट्रंक बिल्डों को प्रबंधित करने में कामयाब रहे। (मैं एक बग ट्रैकिंग एप्लिकेशन पर काम कर रहा हूं।) मैंने रिपोजिटरी पैटर्न का उपयोग करके एक अच्छी डेटा एक्सेस लेयर बनाई है।फ़्लुएंट हाइबरनेट के ऑटो मैपर को ट्यून कैसे करें?
मैंने फैसला किया कि मेरी संस्थाएं कुछ खास नहीं हैं, और यह भी कि ओआरएम की वर्तमान परिपक्वता के साथ, मैं डेटाबेस को हाथ से तैयार नहीं करना चाहता हूं। इसलिए, मैंने FluentNHibernate की ऑटो मैपिंग सुविधा का उपयोग NHibernate की "hbm2ddl.auto" प्रॉपर्टी सेट "बनाने" के साथ किया है।
यह वास्तव में एक आकर्षण की तरह काम करता है। मैंने अपने ऐप डोमेन की कॉन्फ़िगरेशन फ़ाइल में NHibernate कॉन्फ़िगरेशन डाला, इसे सेट अप किया, और इसके साथ खेलना शुरू कर दिया। (समय के लिए, मैंने केवल कुछ यूनिट परीक्षण बनाए हैं।) यह डेटाबेस में सभी तालिकाओं को बनाया गया है, और इसके लिए मुझे जो भी चाहिए। यह मेरे कई से कई रिश्तों को सही ढंग से मैप किया गया।
-
डीबी में बनाए गए स्तंभों की
- सभी अशक्त अनुमति देते हैं:
हालांकि, वहाँ कुछ छोटे खामियों कर रहे हैं। मैं समझता हूं कि यह अनुमान नहीं लगा सकता कि कौन से गुणों को शून्य की अनुमति देनी चाहिए और जो नहीं करना चाहिए, लेकिन कम से कम मैं इसे बताना चाहता हूं कि इसे केवल उन प्रकारों के लिए शून्य की अनुमति देनी चाहिए जिनके लिए .NET में शून्य है (उदाहरण के लिए गैर। सुस्त मूल्य प्रकारों को शून्य की अनुमति नहीं देनी चाहिए)।
- इसके द्वारा बनाए गए सभी nvarchar और varbinary कॉलम, 255 की डिफ़ॉल्ट लंबाई है। मैं उन्हें इसके बजाय अधिकतम पर रखना पसंद करूंगा।
क्या ऊपर दो सरल नियमों के बारे में ऑटो मैपर को बताने का कोई तरीका है?
यदि उत्तर नहीं है, तो क्या यह सही ढंग से काम करेगा यदि मैं इसे बनाए गए तालिकाओं को संशोधित करता हूं? (तो, अगर मैं कुछ स्तंभ सेट नहीं अशक्त की अनुमति देते हैं, और कुछ अन्य के लिए स्वीकृत सीमा बदलने के लिए, इसे सही ढंग से उन लोगों के साथ काम करेंगे के लिए?)
अंतिम संपादन: बिग जो कोई द्वारा गिरा और बाहर की मदद की के लिए धन्यवाद। फ्लुएंट के साथ मेरे सभी मुद्दों को हल किया गया है।
बहुत बहुत धन्यवाद! मैं इसे निम्नलिखित कोड के साथ काम करने में कामयाब रहा: दृढ़ता मॉडल। कॉन्वेंटन। जोड़ें (कन्वेंशनबिल्डर। प्रॉपर्टी। हमेशा (x => x.Length (16000))); हालांकि यह थोड़ा हैकी है, क्योंकि SQL सर्वर में, 16000 इसे MAX पर सेट करेगा, लेकिन यह अन्य डेटाबेस सर्वर के लिए अच्छा नहीं हो सकता है। क्या ऐसा करने का एक सामान्य तरीका है? – Venemo
वास्तव में नहीं। आम तौर पर आपको इसे "स्ट्रिंगक्लब" कस्टमटाइप पर सेट करना चाहिए, क्योंकि इसका मतलब एनएचबीर्नेट को होना चाहिए कि यह 'टेक्स्ट' प्रकार है, लेकिन यहां तक कि कुछ एनएचबीरनेट डेटाबेस प्रदाता (जैसे PostgreSQL) इसे अवहेलना करेंगे। यही कारण है कि उदाहरण के लिए मेरे ओवरराइड उदाहरण में मैंने कस्टम टेक्स्ट और कस्टमस्क्लट घोषणा दोनों का उपयोग "टेक्स्ट" पर सेट करने के लिए किया है। वैकल्पिक रूप से यदि आप नीचे डेटाबेस स्कीमा बदलते हैं तो NHibernate वास्तव में परवाह नहीं करेगा कि यह वर्चर है या कुछ बड़ा (टेक्स्ट, ब्लॉब, आदि) है। लेकिन यह बहुत स्पष्ट चीजों के कारण या तो एक अच्छा समाधान नहीं है। – SztupY
ठीक है, मैं इसे छोड़ दूंगा क्योंकि यह समय के लिए है। बीटीडब्ल्यू, यहां एक और हंगरी देखना अच्छा लगता है। :) – Venemo