gpt4 book ai didi

json - 如何在一个请求中更新 OData 实体并修改其导航属性?

转载 作者:行者123 更新时间:2023-12-04 11:27:35 25 4
gpt4 key购买 nike

我正在尝试使用 WCF 数据服务提供的 OData 服务(目前使用 OData V3 application/json;odata=verbose 有效负载格式。我将来可能会使用 JSON Light 格式)来实现我认为的简单场景.基本场景是这样的:

我有两个实体:

class Person 
{
public int ID { get; set; }
public string Name { get; set; }
public virtual PersonCategory Category { get; set; }
}

class PersonCategory
{
public int ID { get; set; }
public string Description { get; set; }
public virtual ICollection<Person> People { get; set; }
}

现在,我想为一个人创建一个简单的编辑页面。此编辑页面可能有姓名输入,以及人员类别的输入或下拉菜单。

所以,场景是:
  • 代码使用 $expand 下载 Person 类别:GET/api.svc/People(1)?$expand=Category
  • 用户同时编辑此人的 Name 属性和他们的 Category。
  • 该页面的代码发出单个请求来更新该人员的姓名和类别属性。

  • 这里的关键在于“单个请求”。这是我无法找到文档的部分。我见过他们将上面的第 3 个请求分成两个请求的例子。像这样(我不记得确切的格式 - 我也不确定在执行 PUT 之前是否必须删除类别链接):
    PATCH /api.svc/People(1) with content: {"Name": "new name" }
    PUT /api.svc/People(1)/$links/Category with content: { "url": "/api.svc/Categories(2)" }

    但是,我也听说过,但没有证明,可以将此更新作为单个请求来实现,其中对 Category 导航属性的更改与对 Person 实体的其他更改内联指定。有人可以给我一个如何做到这一点的例子吗?另外,你能告诉我如何使用多对多导航属性来完成它,而不是我上面描述的一对多。

    最后,我目前使用的是详细的 JSON 格式 V3。如果我改用新的 JSON 光格式,您对上述问题的回答会有所不同吗?如果是这样,如何?

    最佳答案

    我找到了两种内联表示导航属性的方法:

    application/json;odata=verbose - { "Name": "new name", "Category": { "__metadata": { "uri": "Categories(2)" }}}
    application/json - { "Name": "new name", "Category@odata.bind": "Categories(2)" }

    关于json - 如何在一个请求中更新 OData 实体并修改其导航属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12604673/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com