开发者

How to properly create and link a one-to-one relationship in single POST request with OData

开发者 https://www.devze.com 2023-02-03 03:55 出处:网络
In the OData:Operations documentation, section 2.4 fourth paragraph down, it reads when creating an entity with POST it is also possible to create a link within the same request.However, I\'m having t

In the OData:Operations documentation, section 2.4 fourth paragraph down, it reads when creating an entity with POST it is also possible to create a link within the same request. However, I'm having trouble trying to make this work. A similar question has been asked about many-to-many linking while creating and it looks like that particular scenario isn't possible without a batch request. Below is the scenario I'm trying to create using this sample OData read write service.

Create a new Product named "Test Product" and link it to Category(0) in a single POST using JSON.

I have tried...

POST /OData/OData.svc/Products HTTP/1.1

Accept: application/json

Content-Type: application/json

{ "ID": 99, "Name": "Test Product", "Description": "Simple Test", "ReleaseDate": "\/Date(1210204800000)\/", "DiscontinuedDate": null, "Rating": 3, "Price": "99.99", "Category":"http://services.odata.org/OData/OData.svc/Categories(0)" }

and ...

POST /OData/OData.svc/Products HTTP/1.1

Accept: application/json

Content-Type: application/json

{ "ID": 99, "Name": "Test Product", "Description": "Simple Test", "ReleaseDate": "\/Date(1210204800000)\/", "DiscontinuedDate": null, "Rating": 3, "Price": "99.99", "Category": {"uri": "http://services.odata.org/OData/OData.svc/Categories(0)"} }

Both which result in failures.

Another example using atom format...

<?xml version="1.0" encoding="utf-8"?>
<entry xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
    <title type="text"/>
    <updated>2010-02-27T21:36:47Z</updated>
    <author>
        <name/>
    </author>
    <Link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Category" type="application/atom+xml;type=Entry" title="Category" href="Categories(0)"/>
    <category term="ODataDemo.Product" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/>
    <content type="application/xml">
        <m:prope开发者_JAVA技巧rties>
            <d:ID m:type="Edm.Int32">99</d:ID>
            <d:Name m:type="Edm.String">New Product</d:Name>
            <d:ReleaseDate m:type="Edm.DateTime">1992-01-01T00:00:00</d:ReleaseDate>
            <d:DiscontinuedDate m:type="Edm.DateTime" m:null="true"/>
            <d:Rating m:type="Edm.Int32">4</d:Rating>
            <d:Price m:type="Edm.Decimal">2.5</d:Price>
        </m:properties>
    </content>
</entry>

The above results in a 201 created, yet no association is created for the new Product linking to the existing Category.

Any help would be appreciated. Thanks in advance.


Pablo Castro from Microsoft answered my question. He suggested in the Atom payload I change the capital "L", to lowercase. IE.

<link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Category" type="application/atom+xml;type=entry" title="Category" href="Categories(0)"/>

For the JSON payload you need to include "__metadata" in order for it to work. IE.

{
 Prop1: ...,
 Prop2: ...,
 LinkProp1: { __metadata: { uri: "http://..." } }
}
0

精彩评论

暂无评论...
验证码 换一张
取 消