gpt4 book ai didi

odata - 我怎样才能用它的 child 更新实体?补丁方法不起作用

转载 作者:行者123 更新时间:2023-12-01 10:38:59 24 4
gpt4 key购买 nike

我必须用它的子列表更新我的实体,如下所示:

 public class Entity1 
{
int Id{get;set;}
ObservableCollection<Child1> ChildrenList {get;set;}
string Name{get;set;}
}

public class Child1
{
string Nome{get;set;}
string Cognome {get;set;}
}

我是这样实现patch方法的:

[AcceptVerbs("PATCH", "MERGE")]
public async Task<IHttpActionResult> Patch([FromODataUri] int key, Delta<Entity1> entityDelta)
{

if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var entity = await Context.Entity1.FindAsync(key);
if (entity == null)
{
return NotFound();
}
entityDelta.Patch(entity);

try
{
await Context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
return NotFound();
}
return Updated(entity);
}

但是当我尝试以这种方式从 fiddler 调用它时:

Url: http://localhost/odata4/Entity1(1)/  with patch request

Request Headers: Content-Type: application/json

Request Body:
{
Name: "pippo2",
ChildrenList:[{
Nome: "Test",
Cognome: "Pippo"
}]
}

它在 Model.isValid 属性中给出错误并指定返回此错误:

Cannot apply PATCH to navigation property 'ChildrenList' on entity type 'Entity1'.

我该如何解决?补丁方法是正确的使用方法吗?

最佳答案

OData V4 spec说要更新一个实体:

实体不得包含相关实体作为内联内容。它可能包含导航属性的绑定(bind)信息。对于单值导航属性,这会替换关系。对于集合值导航属性,这会增加关系。

因此,您可以使用:

  1. 更新 child :

    补丁/放置:~/Child1s(...)

  2. 更新父节点

    补丁/放置:~/Entity1s(...)

  3. 更新父子关系:

    PATCH/PUT ~/Entity1s(...)/ChildrenList/$ref

带有实体引用链接内容。

关于odata - 我怎样才能用它的 child 更新实体?补丁方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31585004/

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