स्पष्ट रूप से int <-> enum
won't be supported in the initial release of EF 4. मैं उन लोगों से सहमत हूं जो यह कहते हैं।
मैं एक संपत्ति है कि मुझे
public partial class MyEntity
{
public MyEnum HurrEnum {get{return (MyEnum)Hurr;} set{Hurr = (int)value;}}
}
के लिए कास्टिंग करता है का उपयोग कर रहा यह आप सामान "सही ढंग से" नाम यदि ऐसा है तो बुरा नहीं है (जिसका अर्थ है, तो यह बेवकूफ नहीं लगती है)। उदाहरण के लिए, मेरे पास एक ReasonCode enum है जो डेटाबेस में कारण के रूप में संग्रहीत है, इसलिए मेरे पास संपत्ति का कारण और कारण कोड संस्करण है। अभी के लिए काफी अच्छी तरह से काम करता है।
सबसे पहले, मैं सिर्फ EF4 उपयोग करने के लिए तो मैं यह कैसे काम करता साथ अंतरंग नहीं कर रहा हूँ शुरू कर रहा हूँ। मैं इसे एल 2 एस के समान मानता हूं लेकिन बेहतर इकाई समर्थन के साथ। नमक के अनाज के साथ इसे ले लो।
स्पष्ट होने के लिए, यह संपत्ति सुविधा के लिए है और मैं 90% सुनिश्चित हूं कि यदि आप इस संपत्ति का उपयोग कर डेटाबेस से पूछताछ करने का प्रयास करते हैं तो ईएफ बुरी तरह प्रतिक्रिया देगा। ईएफ आपकी संपत्ति के बारे में नहीं जानता है और एसक्यूएल बनाने के लिए इसका उपयोग नहीं कर सकता है। तो यह:
var foo = Db.Foos.Where(x=> x.HurrEnum == Hurr.Durr);
शायद पूरे Foos तालिका में परिणाम होगा स्मृति में ले जाए जाने और उसके बाद पार्स:
var foo = from x in Db.Foos where x.HurrEnum == Hurr.Durr select x;
शायद उम्मीद के रूप में, जहां इस व्यवहार करने के लिए असफल हो जायेगी। यह संपत्ति सुविधा के लिए है और डेटाबेस के हिट होने के बाद ही इसका उपयोग किया जाना चाहिए! जैसे:
// this is executed in the sql server
var foo = Db.Foos.Where(x=> x.Hurr == 1 || x.Hurr == 2).ToArray();
// this is then done in memory
var hurrFoos = foo.Where(x=> x.HurrEnum == Hurr.Durr);
आप अंतर समझ में नहीं आता है तो आप आग के साथ खेल रहे हैं यहाँ है। आपको यह जानने की जरूरत है कि ईएफ/एल 2 एस आपके कोड को कैसे समझता है और इसे एसक्यूएल स्टेटमेंट में परिवर्तित करता है।
बीटीडब्लू, लिंक एक एमएसडीएन मंच प्रश्न है जिसका उत्तर डैनियल सिमन्स द्वारा किया गया है जो ईएफ 4 पर देव लीड है। – Will
क्या इससे आपको किसी प्रश्न में इसका उपयोग करने की अनुमति मिलती है? '। जहां (x => x.HurrEnum = MyEnum.Foo);'? –
निश्चित रूप से, आप यह कर सकते हैं। हालांकि, वह क्वेरी (90% निश्चित) एसक्यूएल में परिवर्तित नहीं होगी। मेरा हैक केवल सुविधा के लिए है। यदि आप चाहते हैं कि यह क्लॉज एसक्यूएल में बनाने के लिए आपको int का उपयोग करना होगा। अन्यथा, यह एसक्यूएल की बजाय मेमोरी में फेंक दिया जा सकता है या जहां खंड निष्पादित किया जाएगा। – Will