2012-11-10 9 views
22

में Enum के साथ संगत डाटाबेस पहली डिजाइन का उपयोग करना और tinyint होने (या SMALLINT) स्तंभ नहीं:TINYINT (बाइट), SMALLINT (int16) EF5

[MyEnumColumn] [tinyint] NOT NULL 

मैं

साथ ईडीएम में Enum प्रकार के लिए इस स्तंभ मैप किया
External Type: NSpace.MyEnumType 
Name:MyEnumType 
UnderlyingType:Byte 

कहाँ NSpace.MyEnumType इस तरह परिभाषित किया गया है:

public enum MyEnumType 
{ One, Two, Three, All } 
केवल

जब इकाई लोड करने का प्रयास यह त्रुटि मिलना संदर्भ से:

Schema specified is not valid. Errors:

No corresponding object layer type could be found for the conceptual type 'EntityDataModel.MyEnumType'.

The following information may be useful in resolving the previous error:

The underlying type of CLR enumeration type does not match the underlying type of EDM enumeration type.

एक ही लागू होता है अगर मैं [SMALLINT] और [int16] का उपयोग करें, लेकिन एक बार मैं [इंट] और करने के लिए enum प्रकार के डेटाबेस को बदलने [Int32] त्रुटि चला गया है।

मुझे 1 बाइट (टिनिंट) के बजाय 4 बिट (इंट) डेटा फ़ील्ड में एनम वैल्यू स्टोर करने की आवश्यकता क्यों है, जब 99.9% समय में enums में 256 से अधिक आइटम नहीं हैं या क्या मुझे कुछ और याद आ रहा है?

उत्तर

63

खैर अगर कोई समस्या enum के डिफ़ॉल्ट प्रकार में है दिलचस्पी है:

public enum MyEnumType 
{ One, Two, Three, All } 

enum चूक के बाद से टाइप करने के लिए पूर्णांक, [अंतर्निहित प्रकार: {बाइट}] के प्रकार से मेल नहीं खाता [ एक्सटर्नल टाइप] {MyEnumType: इंट} तो अपने मूल tinyint क्षेत्र आप इस तरह अपने enum परिभाषित करने की जरूरत के लिए यह तय करने के लिए:

public enum MyEnumType : byte 
{ One, Two, Three, All } 
+0

यह भी त्रुटि है कि मैं आज था हल किया। तो +1 – magicandre1981

+0

यह मेरा दिन बचाया :) +1 – Midas

+0

अच्छा अगर कोई दिलचस्पी लेता है, तो हाँ, निश्चित रूप से आप मुझे बचाओ !! धन्यवाद भाई!! – CMS

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