entity-framework - 如何使用 OData 在单个 POST 请求中正确创建和链接一对一关系

标签 entity-framework odata wcf-data-services

在 OData:Operations 文档的第 2.4 节第四段中,当使用 POST 创建实体时,也可以在同一请求中创建链接。但是,我在尝试进行这项工作时遇到了麻烦。在创建时提出了一个关于多对多链接的类似问题,看起来如果没有批处理请求,这种特定场景是不可能的。以下是我尝试使用此 sample OData read write service 创建的场景.

创建一个名为“Test Product”的新产品,并使用 JSON 在单个 POST 中将其链接到 Category(0)。

我试过了...
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)" }
和 ...
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)"} }
两者都会导致失败。

另一个使用原子格式的例子......

<?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,但没有为链接到现有类别的新产品创建关联。

任何帮助,将不胜感激。提前致谢。

最佳答案

巴勃罗·卡斯特罗 来自微软回答了我的问题。他建议在 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://..." } }
}

关于entity-framework - 如何使用 OData 在单个 POST 请求中正确创建和链接一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4644428/

相关文章:

c# - 在 C# 中使用 OData 服务不起作用

带有跳过和顶部的 OData 分页 - 如何知道没有更多数据?

c# - WCF 数据服务/ Entity Framework : Logging client's username, 身份验证、授权

c# - 不是正确的<type>?

WCF 服务默认是restful 还是基于soap?

c# - Entity Framework 代码优先 + MySQL...NullReferenceException

ASP.NET Core EF6 身份

sql - 如何自动将实体模型更改部署到数据库?

c# - .Net Core 1.1 上的 OData v4 缺失/$元数据

entity-framework - 如何正确删除和重新添加实体数据模型