2013-02-02 15 views
12

कक्षा में उपयोग किए जाने वाले डेटा प्रकारों पर कौन सी सीमाएं हैं जिनका उपयोग SQLite-net द्वारा तालिका का प्रतिनिधित्व करने के लिए किया जाएगा?क्या मैं SQLite के लिए इच्छित कक्षा में स्ट्रिंग की सूची का उपयोग कर सकता हूं?

public List<string> CoconutWaterBrands { get; set; } 

... या मैं इस की आवश्यकता होगी:: विशेष रूप से, मैं इस का उपयोग कर सकते

public string[] CoconutWaterBrands { get; set; } 

... या पूरी तरह कुछ और?

उत्तर

10

ओआरएम (उर्फ अमूर्त रिसाव) इस तरह की समस्या होगी। कक्षा में फ़ील्ड तालिका में कॉलम के अनुरूप होंगे। यदि आप सूची या सरणी का उपयोग करते हैं तो ओआरएम को किसी भी कॉलम में सूची में उन मानों को किसी भी तरह से जोड़ना होगा, इसके लिए इसे किसी प्रकार का विभाजक चुनना होगा और यदि विभाजक आपके स्ट्रिंग मान के अंदर दिखाई देता है, तो आखिरकार आप करेंगे धीरे-धीरे अपने स्वयं को खरगोश छेद में ढूंढें।

मुझे SQLite-net समर्थन सरणी/सूची नहीं लगता है। आपको स्ट्रिंग का उपयोग करने की आवश्यकता होगी (और विभाजित करें और आवश्यकतानुसार इसमें शामिल हों) या एक से अधिक रिश्तों का प्रतिनिधित्व करने के लिए एक नई तालिका बनाएं।

8

सवाल का एक और अधिक ठोस समाधान प्रदान करने के लिए, आप एक JSON ब्लॉब को क्रमानुसार करने Newtonsoft.Json इस्तेमाल कर सकते हैं:

अर्थात

private string coconutWaterBrands; 

[Ignore] 
public List<string> CoconutWaterBrands { 
    get 
    { 
     return JsonConvert.DeserializeObject<List<string>>(coconutWaterBrands); 
    } 
    set 
    { 
     coconutWaterBrands = JsonConvert.SerializeObject(value); 
    } 
} 
+2

शायद [अनदेखा] के साथ नहीं, या आपको इसे (डी) क्रमबद्ध करने के लिए एक और संपत्ति की आवश्यकता होगी। – jv42

10

सैंडी के जवाब की तरह, serializing/सूची deserializing के मामले में, आप SQLite-Net Extensions library से Text blobbed properties इस्तेमाल कर सकते हैं। तो अपने मॉडल कक्षा में उदाहरण के लिए:

public class SomethingToDoWithCoconuts 
{ 
    [TextBlob(nameof(CoconutWaterBrandsBlobbed))] 
    public List<string> CoconutWaterBrands { get; set; } 
    public string CoconutWaterBrandsBlobbed { get; set; } // serialized CoconutWaterBrands 
} 
documentation on Text blobbed properties से

:

पाठ blobbed गुण सहेजने और जब भरी हुई deserialized एक पाठ संपत्ति में क्रमानुसार लगे हुए हैं। यह एक ही तालिका में एक ही कॉलम में साधारण वस्तुओं को संग्रहीत करने की अनुमति देता है।

टेक्स्ट-ब्लॉबड गुणों में वस्तुओं और कुछ सीमाओं को क्रमबद्ध करने और deserializing का एक छोटा ओवरहेड होता है, लेकिन बुनियादी वस्तुओं या सरल रिश्तों की सूची या शब्दकोश जैसे साधारण वस्तुओं को स्टोर करने का सबसे अच्छा तरीका है। टेक्स्ट-ब्लॉबड गुणों को घोषित स्ट्रिंग प्रॉपर्टी की आवश्यकता होती है जहां धारावाहिक ऑब्जेक्ट संग्रहीत किया जाता है।

टेक्स्ट-ब्लॉबड गुणों में अन्य वस्तुओं के संबंध नहीं हो सकते हैं और न ही इसके माता-पिता के साथ प्रतिकूल संबंध हो सकते हैं।

कोई JSON- आधारित धारावाहिक का उपयोग तब किया जाता है जब TextBlobOperations.SetTextSerializer विधि का उपयोग करके कोई अन्य धारावाहिक निर्दिष्ट नहीं किया गया हो। JSON serializer का उपयोग करने के लिए, न्यूटॉन्सॉफ्ट जेसन.Net लाइब्रेरी का संदर्भ परियोजना में शामिल होना चाहिए, जो NuGet पैकेज के रूप में भी उपलब्ध है।

+6

और सी # 6 के बाद से आप यह भी लिख सकते हैं '[टेक्स्टब्लोब (नाम (नारियल वाटरब्रैंड्सब्लोब))]' इसे कम त्रुटि-प्रवण और अधिक प्रतिक्रियाशील बनाने के लिए। –

+1

आह ठंडा, निश्चित रूप से कम त्रुटि-प्रवण अच्छा पकड़। –

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

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