2012-08-02 9 views
12

संग्रहीत प्रक्रिया मूल्य के साथ एक स्तंभ देता है जो बीआईटी में परिवर्तित किए बिना 0 या 1 हो। मेरी POCO में, अगर मैं के रूप मेंईएफ 4.x में 0/1 को गलत/सही में बदलने के साथ निपटने का सबसे आसान तरीका क्या है?

public bool MyColumn {get; set;} 

मैं इस त्रुटि हो रही है क्षेत्र घोषित:

The specified cast from a materialized 'System.Int32' type to the 'System.Boolean' type is not valid. 

यह वास्तव में समझ में आता है के बाद से एफई एक पूर्णांक के रूप में दिए गए मान को पहचानता है।

मुझे आश्चर्य है कि प्रोसेस को छूए बिना दृश्य के पीछे मैपिंग में 0/1 को गलत/सही करने के लिए स्वचालित रूप से 0/1 को फ्लैंट एपीआई का उपयोग करने के लिए कोई आसान तरीका है?

अग्रिम धन्यवाद!

+4

आप पहले से ही इस पर छुआ। रिटर्न वैल्यू को बीआईटी में कनवर्ट करें। –

+0

बू सही है। यदि आपके पास कॉलम के रिटर्न प्रकार को बिट में बदलने के लिए संग्रहीत प्रक्रिया तक पहुंच नहीं है, तो आपको संपत्ति के प्रकार को 'int' में बदलना होगा, और उसके बाद समानता की जांच 0 – rossipedia

+0

पर होनी चाहिए इसके लिए एक समान मुद्दा - संग्रहित प्रो की शुरुआत में मैंने टाइप बिट के कॉलम के साथ एक टेम्प तालिका को परिभाषित किया था। परिणाम लौटने पर, मैं temp तालिका से एक चयन को जोड़ रहा था, एक और क्वेरी के साथ जहां बिट कॉलम के लिए मान बस "0" पर सेट किया गया था। मुझे ऊपर की तरह एक ही त्रुटि मिल रही थी, और कास्ट (बिटकॉलम बिट के रूप में) का उपयोग कर इसे हल कर दिया - इसने त्रुटि को हल किया, और मुझे इसके आसपास काम करने के लिए कोड बदलने की आवश्यकता नहीं थी। – hitch

उत्तर

12

आप क्या कर सकते हैं बूलियन प्रतिनिधित्व का प्रतिनिधित्व करने के लिए एक और संपत्ति है। NotMapped विशेषता के साथ इसे सजाने के लिए ताकि ईएफ इसे मैपिंग के लिए नहीं मान सके। अन्य संपत्ति के मूल्य के आधार पर करें और यदि स्थिति और true /false वापस करें।

public Class Customer 
{ 

    [NotMapped] 
    public bool MyColumnBool 
    { 
     get 
     { 
     return (MyColumn ==1); 
     } 
    } 

    public int MyColumn {get; set;} 
    // other properties 

} 
+4

+1, हालांकि मैं सचमुच शून्य-शून्य होने पर 'MyColumn! = 0' वापस कर दूंगा। – Tergiver

-3

उपयोग System.Convert.ToBoolean(int)

+0

यह आसान है। बस फोर्क करें और ऐसा करने के लिए ईएफ स्रोत कोड अपडेट करें, और जब आपका पुल अनुरोध स्वीकार किया जाता है, तो EF स्वचालित रूप से 'System.Convert.ToBoolean (int)' क्वेरी परिणाम को पूरा करते समय स्वचालित रूप से करेगा। – ProfK

23

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

select col1, col2, CONVERT(BIT, CASE WHEN col3 IS NULL THEN 0 ELSE 1 END) as colWithBit 
FROM table1 
+4

यह स्वीकार्य उत्तर होना चाहिए ... – caesay

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

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