2010-10-25 9 views
8

डिफ़ॉल्ट रूप से एंटीटी फ्रेमवर्क मैप्स टिनिंट को बाइट करने के लिए टिनिंट को मैपिंग।इकाई फ्रेमवर्क: बूलियन

मैं अंतर्निहित प्रकार बदलने की कोशिश की बाद यह बूलियन करने के लिए उत्पन्न किया गया था, लेकिन संकलन त्रुटि हो रही

सदस्य मैपिंग निर्दिष्ट मान्य नहीं है। सदस्य 'blm के प्रकार' Edm.Boolean [Nullable = False, DefaultValue =] '

4.0 में यह संभव है?

यह मेरा विचार बूलियन के रूप में tinyint कॉलम का उपयोग करना नहीं था। यह हाइबरनेट का उपयोग करके एक और टीम द्वारा स्वचालित रूप से किया गया था जो स्पष्ट रूप से MySQL अनुकूलता के लिए ऐसा करता है। जाहिर है कि टिनिंट के पास 2 से अधिक मूल्य हैं। मैं इसे मैप करने का एक तरीका ढूंढ रहा हूं ताकि 1 के लिए स्वीकार करने वाला कोई भी झूठा है, या 0 के लिए कुछ भी स्वीकार करना सच है। या तो मुझे

के लिए काम करेगा वहाँ एफई में प्रकार का एक प्रकार अनुवादक में प्लग करने के लिए एक तरीका है?

उत्तर

3

MSDN के पृष्ठ से integer types पर, हम देखते हैं कि tinyint प्रकार 0 से 255

एक bool को लेकर एक पूर्णांक का प्रतिनिधित्व करता है, इसके विपरीत, केवल एक द्विआधारी 0 या 1 प्रतिनिधित्व करता है।

byte से bool करने के लिए डिफ़ॉल्ट मानचित्रण बदलने (अगर यह भी संभव थे, this page के अनुसार ऐसा लगता है जो यह नहीं है) की तरह मतलब नहीं है - कैसे, उदाहरण के लिए, आप मूल्य 42 (एक वैध tinyint का प्रतिनिधित्व करेंगे) bool के रूप में?

यदि आपको bool प्रकार की संपत्ति के साथ एक इकाई की आवश्यकता है, तो मैं इसे bit प्रकार के कॉलम पर मैप करने का सुझाव दूंगा।

+0

सहमत हुए। मुझे नफरत है कि छोटे छोटे चींटियों का उपयोग बूलियन का प्रतिनिधित्व करने के लिए किया जाता है। स्पष्ट रूप से यह जावा में हाइबरनेट का उपयोग करके किया गया था, और यह फ़ील्ड को mysql compatiblity के लिए tinyint के रूप में बनाता है .. –

+3

पुरानी भाषाओं में 0 से अधिक के किसी भी मूल्य को सत्य के रूप में माना जाता था और 0 को झूठा माना जाता था ... इसलिए वे आंशिक रूप से दोषी हैं :) – Dismissile

+3

इसके विपरीत, यह बहुत से सांस बनाता है! यदि आप बस डेटाबेस स्कीमा को बदल नहीं सकते हैं (जो भी कारणों से), तो आपके पास मैपिंग समायोजित करने के अलावा कोई अन्य विकल्प नहीं है। जब तक आप एक बुलियन अर्थशास्त्र के साथ एक पूर्णांक के रूप में एक संपत्ति का खुलासा नहीं करना चाहते हैं, जो बदसूरत है। – proskor

4

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

के रूप में वास्तविक मानक है कि 0 झूठे और सच के बराबर अन्य सभी मूल्यों के बराबर है। हालांकि ईएफ को इस तरह के मैपिंग के लिए समर्थन नहीं है। सबसे अच्छी विधि बाइट के रूप में घोषित एक निजी छाया क्षेत्र का उपयोग कर रही है जिसे ईएफ में मैप किया गया है। दूसरा आप एक उपनाम बूलियन संपत्ति बनाते हैं जिसका उपयोग आपके कोड द्वारा किया जाता है।

ईएफ के साथ निजी गुणों को मैप करने के लिए कुछ प्रतिबिंब कोड की आवश्यकता होती है।