2010-01-14 10 views
8

प्रश्न 1: मैं EF4 के साथ चारों ओर खेल रहा हूँ और मैं की तरह एक मॉडल वर्ग है:गणना के साथ ADO.net इकाई फ्रेमवर्क 4 का उपयोग करना? मैं यह कैसे करुं?

public enum Gender {Male,Female,Undisclosed} 
public enum EducationLevel {HighSchool,Bachelors,Masters,Doctorate} 

मैं उम्मीदवार वर्ग और लिंग कैसे मिलता है:

public class Candidate { 

public int Id {get;set;} 
public string FullName {get;set;} 
public Gender Sex {get;set;} 
public EducationLevel HighestDegreeType {get;set;} 
} 

यहाँ लिंग और EducationLevel तरह Enums हैं

  • मैं मॉडल पहले विकास करना
  • मैं घ कार्य करें: और EducationLevel साथ EF4 अगर काम कर बी पहले विकास

संपादित करें: किसी अन्य प्रश्न here पर ऑब्जेक्ट संदर्भ से संबंधित प्रश्न उठाया गया।

उत्तर

16

स्पष्ट रूप से int <-> enumwon'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 एस आपके कोड को कैसे समझता है और इसे एसक्यूएल स्टेटमेंट में परिवर्तित करता है।

+0

बीटीडब्लू, लिंक एक एमएसडीएन मंच प्रश्न है जिसका उत्तर डैनियल सिमन्स द्वारा किया गया है जो ईएफ 4 पर देव लीड है। – Will

+0

क्या इससे आपको किसी प्रश्न में इसका उपयोग करने की अनुमति मिलती है? '। जहां (x => x.HurrEnum = MyEnum.Foo);'? –

+2

निश्चित रूप से, आप यह कर सकते हैं। हालांकि, वह क्वेरी (90% निश्चित) एसक्यूएल में परिवर्तित नहीं होगी। मेरा हैक केवल सुविधा के लिए है। यदि आप चाहते हैं कि यह क्लॉज एसक्यूएल में बनाने के लिए आपको int का उपयोग करना होगा। अन्यथा, यह एसक्यूएल की बजाय मेमोरी में फेंक दिया जा सकता है या जहां खंड निष्पादित किया जाएगा। – Will

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

  • कोई संबंधित समस्या नहीं^_^