2010-05-31 16 views
12

साथ मैं एक POCO (प्लेन ओल्ड CLR वस्तु) हैइकाई की रूपरेखा 4 POCO शब्दकोश

public Foo 
{ 
    public virtual int Id { get; set; } 
    public virtual Dictionary<string, string> Stuff { get; set; } 
    public virtual string More { get; set; } 
} 

model first दृष्टिकोण का उपयोग करते हुए (यानी मैं अभी तक एक डाटा मॉडल की जरूरत नहीं है), मैं सामग्री (कैसे बने संभाल होगा शब्दकोश)?

उत्तर

7

यह सवाल का सही जवाब नहीं है, लेकिन चूंकि कोई अन्य जवाब नहीं है, इसलिए मैंने जो कुछ किया है, मैं साझा करूंगा।

मैंने बस एक नया प्रकार {Id, Code, Text} बनाया और उस प्रकार की सूची के साथ अपना शब्दकोश बदल दिया। मैं तो चाबियाँ, मूल्यों को प्राप्त करने के लिए कुछ इस तरह करते हैं, या कर एक देखने:

List<string> texts = (from sv in q.SelectableValues select sv.Text).ToList(); 
List<string> codes = (from sv in q.SelectableValues select sv.Code).ToList(); 
string text = (from sv in q.SelectableValues where sv.Code == "MyKey" select sv.Text).First(); 

मेरे मामले में शब्दकोश में प्रविष्टियों की संख्या छोटे हो जाता है। हालांकि, शब्दकोश/सूची बड़ी होने पर प्रदर्शन विचारों के लिए this question देखें।

7

ऐसा लगता है कि एक डेटाबेस में एक शब्दकोश को बनाए रखने के लिए सामान्यीकृत, सही तरीका यह है कि यह समेकित है, क्योंकि टेबल अनिवार्य रूप से आदेश की ढीली अवधारणा के साथ सेट करता है - बस आईनेमेरेबल की तरह। यही कारण है, एक शब्दकोश IEnumerator < KeyValuePair < TKey, TValue>> के रूप में प्रगणित है, और इसलिए तालिका 2 कॉलम होना चाहिए:

Key 
Value 

आप परिसर के प्रकार, की मौजूदा एफई सम्मेलनों है जहां कुंजी हो सकता है वास्तव में वहां से कई गुणों और मूल्य के साथ एक वस्तु हो। उदाहरण के लिए उपयोगकर्ता वस्तुओं की एक शब्दकोश की तरह लग सकता है:

Username (TKey) 
Address1 (TValue) 
Address2 (TValue) 

यह दुर्भाग्यपूर्ण यह सामान्यीकृत पैटर्न एफई के लिए निर्मित नहीं है; इसे प्रस्तावित किया जाना चाहिए।

इसके बजाय अपने समाधान के लिए एक विशेष प्रकार के विकास के लिए, आप एक सामान्यीकृत वर्ग कि KeyValuePair < के एक डेटा एनोटेट संस्करण> पैदा करता है इस्तेमाल कर सकते हैं।

public class EFKeyValuePair<TKey, TValue> 
{ 
    [Key] 
    public TKey Key { get; set; } 
    public TValue Value { get; set; } 
} 

मुझे विश्वास है आप कैसे सुनिश्चित होगी तालिका नामों हालांकि इस वर्ग इनहेरिट और प्रत्येक उपवर्ग के लिए एक विशेषता जोड़े बिना एक तार्किक और निरीक्षण तरीके से लिखा जाएगा नहीं कर रहा हूँ। शायद फ्लुएंट एपीआई आपको यह अंतिम कदम प्राप्त कर सकता है (जिसे मैं बहुत परिचित नहीं हूं)।

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