2013-02-15 11 views
6

मैं एक ही समय में एक इकाई और दो बाल इकाइयों का उदाहरण बनाने का प्रयास कर रहा हूं।विस्तार के साथ ओडाटा पोस्ट इकाई निर्माण

यदि मैं निम्नलिखित JSON को/user_objects संसाधन पर पोस्ट करता हूं तो यह खुशी से माता-पिता user_object इकाई और लिंक की गई User_object_attribute इकाई बनाता है। एकमात्र समस्या यह है कि मैं नए user_object_attribute को शामिल करने के लिए परिणाम सेट का विस्तार नहीं कर सकता, इसलिए मेरे पास प्रभावी रूप से user_object का सबसे अपरिवर्तनीय संस्करण है, लेकिन मुझे फिर ओडाटा सेवा से जाना और पढ़ना है यानी एक और सर्वर हिट करने के लिए user_object_attributes पुनर्प्राप्त करें।

लौटने पर मेरे पास आईडी है जो बच्चे user_object_attribute ऑब्जेक्ट में अच्छी तरह से जायेगी, लेकिन क्या होगा अगर बच्चे के पास आगे सर्वर-साइड जेनरेटेड फ़ील्ड जैसे create_date था? तो मुझे अभी भी ओडाटा रेपो फिर से मारा है?

मैंने सही $ विस्तार क्वेरी की कोशिश की है? $ Expand = user_objects_attributes और जब सृजन सफल होता है तब भी मैं विस्तारित परिणाम सेट वापस नहीं लौटाता हूं।

यदि कोई संभव हो तो क्या किसी को कोई विचार होगा? या यह एक मामला है कि ऐसा इसलिए नहीं है क्योंकि एचटीई ऐसा करने का एकमात्र तरीका है सभी बच्चे user_object_attributes वापस करना होगा?

{ 
    "annotator_id":1, 
    "content_type":"content_type", 
    "created_date":"2013-02-15T17:20:09.191", 
    "guid":"GUID", 
    "size_kb":100, 
    "title":"Title", 
    "updated_date":null, 
    "url":"URL", 
    "user_object_id":0, 
    "user_objects_attributes":[ 
     { 
     "attribute_id":0, 
     "name":"name191", 
     "user_object_id":0, 
     "value":"value191" 
     } 
    ] 
} 

धन्यवाद, मार्क।

उत्तर

3

OData V3 विनिर्देश here को देखते हुए:

संस्करण 1.0 और 2.0 संस्करण में, यदि डालने पूरा करने में सफल होता, सर्वर चाहिए एक 201 (निर्मित) स्थिति कोड और एक के साथ एक प्रतिक्रिया वापस प्रतिक्रिया निकाय जो InsertEntity अनुरोध (खंड 2.2.7.1.1) में निर्दिष्ट वाक्यविन्यास के अनुरूप है। सर्वर के सभी सर्वर-विशिष्ट डेटा प्रोसेसिंग नियम (सत्यापन, और इसी तरह) को निष्पादित करने के बाद प्रतिक्रिया निकाय में डाले गए संसाधनों के मान होना चाहिए। सर्वर पर संसाधन डालने से पहले सर्वर क्लाइंट से प्राप्त संसाधन के मानों को बदल सकता है।

संस्करण 3.0 में, प्रतिक्रिया हो सकती है एक 204 स्थिति कोड [RFC2616] में निर्दिष्ट किया गया है, ग्राहक वरीयता के आधार पर है, InsertEntity अनुरोध पर (अनुभाग 2.2.5.9) पसंद करते हैं को देखने के()।

कोई स्पष्ट नहीं है कि सर्वर को क्या करना चाहिए ... केवल शीर्ष स्तर की बनाई गई इकाई, या उस इकाई और इसके सभी विस्तारित लिंक लौटें।

मुझे आश्चर्य नहीं है कि $ विस्तार का POST (या किसी भी सीयूडी अनुरोध) पर कोई प्रभाव नहीं पड़ेगा। डब्ल्यूसीएफ डीएस शायद इसे अनदेखा करता है अगर यह कोई प्रश्न नहीं है। और कल्पना के द्वारा, यह शायद सही है।

काफी स्पष्ट रूप से, मुझे लगता है कि डब्ल्यूसीएफ डीएस सर्वर के साथ आप कुछ और नहीं प्राप्त कर सकते हैं। वी 3 में या तो आप अपनी इकाई (केवल), या 204 कोई सामग्री के साथ 201 प्राप्त करते हैं यदि आप हेडर निर्दिष्ट करते हैं कि आप कोई सामग्री नहीं चाहते हैं।

चाहे वह ओडाटा अनुपालन हो या नहीं ... पूरी तरह से सुनिश्चित नहीं है :-)। भले ही, मुझे नहीं लगता कि आप समय पर इस बिंदु पर डब्ल्यूसीएफ डीएस स्टैक पर जो चाहते हैं उसे प्राप्त कर सकते हैं।

0

मैं बिना किसी समस्या के OData v4 के $expand क्वेरी विकल्प का उपयोग कर एक नई इकाई बनाने के लिए POST के बाद नेविगेशन गुणों को वापस करने में सक्षम था।

सुनिश्चित करें कि आपकी विधि [EnableQuery] से सजाया गया है और आप नेविगेशन प्रॉपर्टी के नाम से Include पर कॉल करते हैं।

उदाहरण के लिए:

[EnableQuery] 
public IHttpActionResult Post(user_object user) 
{ 
    if (!this.ModelState.IsValid) 
    { 
     return this.BadRequest(this.ModelState); 
    } 

    this.db.user_objects.Add(user); 
    this.db.SaveChanges(); 

    user = this.db.user_objects.Include("user_objects_attributes").Single(x => x.user_object_id == user.user_object_id)); 

    return this.Created(user); 
} 

POST यूआरएल क्वेरी स्ट्रिंग ?$expand=user_objects_attributes शामिल होना चाहिए।

यह भी देखें:
https://github.com/OData/WebApi/issues/356

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