2011-01-10 3 views
3

Dans la documentation OData: Operations, section 2.4 quatrième paragraphe bas, il lit lors de la création d'une entité avec POST il est également possible de créer un lien dans la même requête. Cependant, j'ai du mal à essayer de faire ce travail. Une question similaire a été posée au sujet de la liaison plusieurs-à-plusieurs lors de la création et il semble que ce scénario particulier ne soit pas possible sans une demande par lots. Ci-dessous le scénario que j'essaie de créer en utilisant ce sample OData read write service.Comment créer correctement et lier une relation un-à-un dans une requête POST unique avec OData

Créez un nouveau produit nommé "produit test" et liez-le à la catégorie (0) dans un seul test POST à ​​l'aide de JSON.

J'ai essayé ...

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)" }

et ...

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)"} }

Les deux qui se traduisent par des échecs.

Un autre exemple en utilisant le format atomique ...

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

Les résultats ci-dessus dans un 201 créé, mais aucune association est créée pour le nouveau produit un lien vers la catégorie existante.

Toute aide serait appréciée. Merci d'avance.

Répondre

5

Pablo Castro de Microsoft a répondu à ma question. Il a suggéré dans la charge utile Atom que je change la capitale "L", en minuscules. C'EST À DIRE.

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

Pour la charge utile JSON, vous devez inclure «__metadata» pour que cela fonctionne. C'EST À DIRE.

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