2013-03-28 4 views
5

क्या एज़ूर टेबल स्टोरेज के लिए गैर-व्युत्पन्न पीओसीओ होना संभव है?गैर-व्युत्पन्न पीओसीओ और एज़ूर स्टोरेज

दूसरे शब्दों में, एक POCO जो TableEntity से प्राप्त नहीं होता है या ITableEntity लागू करता है?

ऐसा लगता है कि एक मॉडल है जो इंटरफ़ेस या बेस क्लास पर निर्भर है, क्योंकि यह श्रृंखला में ऊपर की तरफ संदर्भ लेता है - मैं मॉडल को किसी अन्य स्तर में सेट अप नहीं कर सकता इंटरफ़ेस या बेस क्लास के लिए Azure संग्रहण!

उत्तर

7

DynamicTableEntity (इसके लिए ctrl + f) पर एक नज़र डालें। इसका उपयोग क्वेरी और प्रविष्टियों को सम्मिलित करने के लिए किया जा सकता है।

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

कारण आप एज़ूर टेबल स्टोरेज में किसी भी इकाई को केवल सहेज नहीं सकते हैं, यह जानना आवश्यक है कि कौन सी संपत्ति विभाजन कुंजी के रूप में कार्य करती है और पंक्ति कुंजी के रूप में कार्य करती है। "निचले स्तर" पर DynamicTableEntity के साथ काम करने का उछाल यह है कि आप ऐसे प्रश्न बना सकते हैं जो केवल गुणों का एक सबसेट लौटाते हैं जो संसाधन खपत को कम कर देता है। यह आपके मामले में फायदेमंद हो सकता है या नहीं भी हो सकता है।

[DataServiceKey("PartitionKey", "RowKey")] 
public class MyEntity 
{ 
    public string PartitionKey {get; set;} 
    public string RowKey {get; set;} 
    public DateTime Timestamp {get; set;} 
    //other properties 
} 

हालांकि, कि वास्तव में की अपनी समस्या को हल नहीं करता है:

-1

सबसे पहले, TableEntity और ITableEntity के लिए एक और विकल्प, निम्न उदाहरण में, अपने वर्ग को सजाने के लिए DataServiceKey विशेषता का उपयोग करने है जो है अपने मॉडल वर्ग में Azure कार्यान्वयन को रिसाव नहीं करना चाहते हैं। इस मामले में मुझे लगता है कि आप LOKAD Fat Entities जैसे रैपर कार्यान्वयन का उपयोग करना चाहेंगे। लोकद आपके मॉडल ऑब्जेक्ट के सीरियलाइजेशन/deserialization को एक रैपर में संभाल लेगा जो बदले में टेबल स्टोरेज में संग्रहीत है। हालांकि, लोकद का एक नकारात्मक पक्ष यह है कि आपकी वस्तुएं भंडारण में अपारदर्शी हो जाती हैं और आप उन्हें Azure Storage Explorer जैसे कुछ ब्राउज़ नहीं कर सकते हैं।

+0

यह एसडीके के वर्तमान संस्करण में काम नहीं करता है। – James

0

पैकेज मैं कार्यान्वित पर एक नज़र डालें और Nuget में डाल: https://github.com/Azure/azure-storage-net/pull/337/files

विवरण::

करने की सुविधा प्रदान https://www.nuget.org/packages/ObjectFlattenerRecomposer/

यह भी Azure संग्रहण एसडीके अगले संस्करण में जोड़ा जा रहा है एंटिटीप्रोपर्टी डिक्शनरी में जटिल ऑब्जेक्ट्स को फ़्लैट करें और फ़्लैटेड प्रॉपर्टी डिक्शनरी से मूल जटिल ऑब्जेक्ट को पुन: पेश करने की कार्यक्षमता। एक उपयोग यह है कि एपीआई किसी भी जटिल ऑब्जेक्ट को नेस्टेड गुणों के साथ अजीब तालिका भंडारण में फ़्लैटेड फॉर्म में लिखने की अनुमति देता है जो सामान्य रूप से एज़ूर स्टोरेज क्लाइंट एसडीके का उपयोग करके संभव नहीं है।

संस्करण 2.0 अब लेखन और IEnumerable लिखने का समर्थन करता है जैसे सूचियां, Arrays, Azure Table Storage में शब्दकोश।

ब्लॉग: https://doguarslan.wordpress.com/2016/02/03/writing-complex-objects-to-azure-table-storage/

उपयोग: // वस्तु फ़्लैट करें और यह EntityProperty शब्दकोश

शब्दकोश flattenedProperties = ObjectFlattenerRecomposer.Flatten (complexObject) में बदलने का;

// एक डायनामिकटेबल एंटीटी बनाएं और अपने पीके और आरके डायनामिकटेबल एंटीटी डायनामिकटेबल एंटीटी = नई डायनामिकटेबल एंटीटी (विभाजनकी, पंक्तिकी) सेट करें;

गतिशीलTableEntity.Properties = flattenedProperties;

// Azure तालिका भंडारण के लिए DynammicTableEntity लिखें ग्राहक SDK का उपयोग

// इकाई AzureTableStorage से वापस DynamicTableEntity के रूप में ही पी और आर DynamicTableEntity इकाई = [पढ़ें Azure से पी और आर का उपयोग कर] का उपयोग कर पढ़ें ;

// डायनामिकटेबल एंटीटी को वापस मूल जटिल ऑब्जेक्ट में कनवर्ट करें। कल्पना करें मूल कॉम्प्लेक्स ऑब्जेक्ट प्रकार ऑर्डर का था।

ऑर्डर ऑर्डर = ऑब्जेक्टफ्लैटनरकोम्पोज़र। कन्वर्टबैक (इकाई। प्रॉपर्टीज);

+0

मैं इसका उपयोग करना चाहता हूं लेकिन NuGet पैकेज .NET 4.5 लक्षित प्रोजेक्ट के लिए स्थापित नहीं होगा ... क्या आप पैकेज आवश्यकताएं बदल सकते हैं या यह एक कठिन आवश्यकता है? – ramseyjacob

+1

देर से उत्तर के लिए खेद है। मैंने .NET 4.5 के साथ पैकेज को पुनर्निर्मित किया, साथ ही तालिका भंडारण में न्यूलबल, टाइमस्पेन, डेटटाइम ऑफसेट, एनम गुणों को लिखने और पढ़ने के लिए समर्थन भी जोड़ा। पैकेज Nuget में है: https://www.nuget.org/packages/ObjectFlattenerRecomposer/1.1.1 –

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