Как правильно создать и связать отношения один-к-одному в одном запросе POST с OData - PullRequest
3 голосов
/ 10 января 2011

В OData: документация по операциям, раздел 2.4, четвертый абзац ниже, в нем говорится, что при создании объекта с помощью POST также возможно создать ссылку в том же запросе.Однако у меня возникают проблемы при попытке сделать эту работу.Аналогичный вопрос был задан в отношении связи «многие ко многим» при создании, и похоже, что этот конкретный сценарий невозможен без пакетного запроса.Ниже приведен сценарий, который я пытаюсь создать с помощью этого образца службы чтения и записи OData .

Создайте новый продукт с именем «Тестовый продукт» и свяжите его с категорией (0) в одном.POST с использованием JSON.

Я пытался ...

POST /OData/OData.svc/Products HTTP/1.1 <br/> Accept: application/json<br/> Content-Type: application/json<br/></p> <p>{ "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)" }

и ...

POST /OData/OData.svc/Products HTTP/1.1 <br/> Accept: application/json<br/> Content-Type: application/json<br/></p> <p>{ "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)"} }

Оба, которые приводят кнеудачи.

Другой пример использования атомного формата ...

<?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:properties>
            <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>

Приведенные выше результаты приводят к созданию 201, но для нового продукта, связанного с существующей категорией, не создано никакой ассоциации.

Любая помощь будет оценена.Заранее спасибо.

1 Ответ

5 голосов
/ 14 января 2011

Пабло Кастро от Microsoft ответил на мой вопрос.Он предложил в полезной нагрузке Atom изменить прописную букву «L» на строчную.IE.

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

Для полезной нагрузки JSON необходимо включить «__metadata», чтобы она работала.IE.

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