2011-06-01 11 views
6

जैसा कि मैं समझता हूं कि आपको डेटामेम्बर विशेषता की ऑर्डर प्रॉपर्टी का उपयोग करना चाहिए ताकि चीजों को तोड़ने के क्रम में परिवर्तन के बिना डेटा अनुबंध में चीजें जोड़ सकें, लेकिन जब आप आधार और उप प्रकार के होते हैं तो आप इसे कैसे संपर्क कर सकते हैं?बेस क्लास और व्युत्पन्न कक्षाओं के साथ डब्ल्यूसीएफ डेटा अनुबंध - बेस क्लास में बदलाव के परिणाम क्या हैं?

अगर मैं इस जैसे datacontracts है:

[DataContract] 
[KnownType(typeof(ChildDto))] 
public class BaseDto 
    { 
    [DataMember (Name = "Property", Order = 0)] 
    public string Property { get; set; } 

    [DataMember (Name = "Property2", Order = 1)] 
    public string Property2 { get; set; } 
    } 

[DataContract] 
public class ChildDto:BaseDto 
    { 
    [DataMember (Name = "Property3", Order = 2)] 
    public string Property3 { get; set; } 

    [DataMember (Name = "Property4", Order = 3)] 
    public string Property4 { get; set; } 
    } 

और मैं BaseDto के लिए एक नया डेटा सदस्य प्रॉपर्टी जोड़ना चाहते हैं, किस क्रम मैं संपत्ति ताकि चीजें नहीं टूटते देना चाहिए? या मुझे BaseDto पर कुछ भी नहीं जोड़ना चाहिए? क्या मैं ChildDto पर चीजें जोड़ सकता हूं?

+0

जानना उत्सुक है, क्या ऑर्डर वास्तव में आवश्यक है? आप किस उद्देश्य के लिए या आपके सेवा क्लाइंट इसका उपयोग कर रहे हैं? – thewpfguy

+0

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

उत्तर

5

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

आप Data Member Order शीर्षक वाले इस एमएसडीएन पृष्ठ में उन नियमों के बारे में अधिक पढ़ सकते हैं।

+1

तो क्या यह है? यदि आप डेटा अनुबंध का उपयोग कर रहे हैं तो आप कभी भी अपनी बेस क्लास में कोई सदस्य नहीं जोड़ सकते हैं? – Kim

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