2012-01-23 23 views
6

मैं डेटाबेस के लिए पहले ईएफ कोड का उपयोग करना चाहता हूं जिसे मैं वर्तमान में संग्रहीत प्रक्रियाओं के साथ सादे पुराने ADO.NET का उपयोग कर उपयोग कर रहा हूं।ईएफ कोड प्रथम - नक्शा शब्दकोश या कस्टम प्रकार को nvarchar

मेरे डेटाबेस में मेरे पास nvarchar(MAX) कॉलम हैं जिन्हें Dictionary<string, string> से मैप किया जाना चाहिए।

डेटाबेस में सहेजे जाने पर, यह एक एक्सएमएल स्वरूपित स्ट्रिंग है। मैं इस तकनीक का उपयोग अंतर्राष्ट्रीयकरण की अनुमति देने के लिए करता हूं एक ऑनलाइन स्टोर में एक उत्पाद का नाम। मुझे नहीं पता कि किसी दिए गए उपयोगकर्ता को कितनी भाषाएं अनुवाद करना है, इसलिए मेरे पास प्रत्येक भाषा के लिए Name कॉलम नहीं हो सकता है।

मैं भी एक अलग तालिका में मूल्यों को संग्रहित करना टालना चाहता था, इसलिए मैं शब्दकोश - एक्सएमएल दृष्टिकोण के साथ समाप्त हुआ।

जिस तरह से मैं इसे करता हूं, जब भी मैं डेटाबेस से बातचीत करता हूं तो इन स्तंभों में से किसी एक को स्ट्रिंग के रूप में व्यवहार करना है। मेरे पास एक कस्टम मैपर फ़ंक्शन है जो एक्सएमएल को एक शब्दकोश में बदल सकता है, और एक्सएमएल पर वापस कर सकता है।

लेकिन मुझे पहले ईएफ कोड के साथ ऐसा करने का कोई तरीका नहीं दिख रहा है? कोई विचार?

उत्तर

12

आप एक ऐसी संपत्ति जोड़ सकते हैं जो आपके Dictionary<,> को XML स्ट्रिंग के रूप में वापस कर दे और फिर Dictionary<,> संपत्ति के लिए मैपिंग को हटा दें।

[NotMapped] 
    public Dictionary<string,string> MyDictionary 
    { 
    get; set; 
    } 

    public string DictionaryAsXml 
    { 
     get 
     { 
      return ToXml(MyDictionary); 
     } 
     set 
     { 
      MyDictionary = FromXml(value); 
     } 
    } 

आप अपने DictionaryAsXml संपत्ति का पर्दाफाश करने नहीं करना चाहते हैं this blog post पर एक नजर है। यह दिखाता है कि आप निजी और संरक्षित गुणों को कैसे बना सकते हैं।

+0

बहुत बढ़िया! धन्यवाद :) - मैंने ऐसा नहीं सोचा होगा कि – Yablargo

+0

क्यों एक्सएमएल और जेएसओएन नहीं, आखिरी अधिक कॉम्पैक्ट है और डीबी स्टोरेज नंबर की अवधि में अधिक कुशल होगा? – Piou

+1

@Piou मुझे याद नहीं आया कि मैं पांच साल पहले क्या सोच रहा था, लेकिन मुझे लगता है कि मैं अभी भी एक्सएमएल के लिए जेएसओएन के लिए अधिक उपयोग किया गया था। मुझे लगता है कि उदाहरण JSON के साथ भी काम करेगा, इसलिए इसे आज़माएं। याद रखें कि समयपूर्व अनुकूलन सभी बुराइयों की जड़ है। –

2

मुझे वीबीएनईटी में एक्सएमएल रूपांतरण के साथ कुछ कठिनाइयां थीं। इसलिए मैंने एक JSON स्ट्रिंग और वापस शब्दकोश को क्रमबद्ध करने के लिए newtonsoft.json का लाभ उठाया।

Public Property JsonDict As String 
    Get 
     If MyDict Is Nothing Then 
      Return Nothing 
     Else 
      Return JsonConvert.SerializeObject(MyDict) 
     End If 
    End Get 
    Set(value As String) 
     If value Is Nothing Then 
      MyDict = Nothing 
     Else 
      MyDict = JsonConvert.DeserializeObject(Of Dictionary(Of Single, Single))(value) 
     End If 
    End Set 
End Property 
<NotMapped> 
Public Property MyDict As Dictionary(Of Single, Single) 
संबंधित मुद्दे