2008-10-17 14 views
27

से मैपिंग एनम मेरे पास डेटाबेस तालिका में एक स्ट्रिंग कॉलम है जो कोड में एनम के लिए मानचित्र करता है। मेरी डीबीएमएल फ़ाइल में जब मैंने "टाइप" को MyTypes.EnumType पर सेट किया है तो मुझे निम्न त्रुटि मिलती है:स्ट्रिंग

त्रुटि 1 डीबीएमएल 1005: डीबीटीप 'वरचर (50) न्यूल' के बीच मैपिंग और कॉलम में 'MyTypes.EnumType' टाइप करें। EnumCol 'प्रकार' तालिका 1 'का समर्थन नहीं है।

यह प्रश्न: LINQ to SQL strings to enums इंगित करता है कि मैं जो करने की कोशिश कर रहा हूं वह संभव है, लेकिन यह कैसे किया जाता है?

उत्तर

33

उत्सुक - यह आईआईआरसी काम करना चाहिए; मैं देखूंगा कि क्या मैं एक त्वरित उदाहरण कर सकता हूं - हालांकि, आप यह जांचना चाहेंगे कि आपके पास पूर्णतः योग्यता प्राप्त नाम है (यानी नामस्थान सहित)।

[अद्यतन] here से ऐसा लगता है कि एनटीएम को हल करते समय आरटीएम संस्करण एक बग के साथ भेज दिया गया। एक वर्कअराउंड सुझाया गया (उस पृष्ठ पर) global:: उपसर्ग जोड़ना था। यह इस कामकाज के बिना मेरे लिए ठीक काम करता है, तो शायद यह 3.5 एसपी 1 में तय किया गया है? यदि आप समान नामस्थान में हैं तो यह अयोग्य नाम 3.5 का उपयोग करता है यदि आप अयोग्य नाम का उपयोग करते हैं।

[उदाहरण] हाँ, ठीक काम किया: नॉर्थविंड के साथ, मैं शिपिंग देश के लिए एक enum परिभाषित:

namespace Foo.Bar 
{ 
    public enum MyEnum 
    { 
     France, 
     Belgium, 
     Brazil, 
     Switzerland 
    } 
} 

मैं तो dbml संपादित करने के लिए:

<Column Name="ShipCountry" Type="Foo.Bar.MyEnum" DbType="NVarChar(15)" CanBeNull="true" /> 

यह उत्पन्न:

private Foo.Bar.MyEnum _ShipCountry; 
//... 
[Column(Storage="_ShipCountry", DbType="NVarChar(15)", CanBeNull=true)] 
public Foo.Bar.MyEnum ShipCountry 
{ get {...} set {...} } 

और अंत में एक प्रश्न लिखा:

using (DataClasses1DataContext ctx = new DataClasses1DataContext()) 
{ 
    var qry = from order in ctx.Orders 
       where order.ShipCountry == Foo.Bar.MyEnum.Brazil 
       || order.ShipCountry == Foo.Bar.MyEnum.Belgium 
       select order; 
    foreach (var order in qry.Take(10)) 
    { 
     Console.WriteLine("{0}, {1}", order.OrderID, order.ShipCountry); 
    } 
} 

ठीक काम किया; परिणाम:

10250, Brazil 
10252, Belgium 
10253, Brazil 
10256, Brazil 
10261, Brazil 
10287, Brazil 
10290, Brazil 
10291, Brazil 
10292, Brazil 
10299, Brazil 
+0

यह काम करता है जब मुझे 3.5 एसपी 1 – Barry

+5

मिला, मुझे 3.5 एसपी 1 के साथ "ग्लोबल ::" प्रीपेड करना पड़ा। शायद इसकी वजह से मैंने डेटाकॉन्टेक्स्ट (प्रोजेक्ट.डाल) और संस्थाओं (Project.Dal.Entities) के लिए डिफ़ॉल्ट नामस्थान बदल दिया है? किसी भी वीबी के लिए – jrummell

17

मुझे पता है कि इसका उत्तर दिया गया है, लेकिन मुझे अभी भी यह त्रुटि मिल रही है। बहुत अजीब।

वैसे भी, मुझे एक समाधान मिला। आपको PREPENDglobal::

WTF की तरह enum का पूरा नामस्थान होना चाहिए? ठीक ठीक। मुझे पता है कि यह बहुत अजीब लगता है। यहाँ एक उदाहरण screenie =>

alt text http://img11.imageshack.us/img11/7517/lolzqg.png

तो लंगड़ा :(

फिर भी, मैं इस को समझ नहीं आया कि कुछ दोस्त Matt कहा जाता है।, किया था। और वह एमएस कनेक्ट और पर एक बग रिपोर्ट तैनात वे इसे फिर भी repro नहीं कर सकते तो यह तय नहीं कर रहा है, मुझे लगता है।

, HTH।

+1

त्वरित नोट।नेट उपयोगकर्ता, टाइप सिंटैक्स "ग्लोबल। <पूरी तरह से योग्य-enum-type>" – Quango

+1

होना चाहिए तो आप क्या कह रहे हैं, "यह एक जाल है"? –

+1

मैं वास्तव में हूँ! हमें उन एमएस डेवलपर्स को अधिक समय देना होगा, उस सुपर स्टार प्रोजेक्ट पर सभी कोडों पर ध्यान केंद्रित करें! –

1

आप designer.cs में प्रकार से अधिक वैश्विक :: qualyfier और प्रेस नियंत्रण + अंतरिक्ष जोड़ देते हैं तो यह पहचानता दायर प्रकार और आप इसे हटा सकते हैं।

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