张贴具有导航属性的新实体

本文关键字:实体 新实体 导航 属性 张贴具 | 更新日期: 2023-09-27 18:26:56

当涉及导航属性时,我很难找到如何为OData v4服务创建(POST)新实体的示例。

例如,假设我有以下两个模型:

class Item
{ 
    [Key]
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    public virtual Group Group { get; set;}
}
class Group
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
}

如果我想创建一个项目,它应该属于一个已经定义的组(比如说,ID=123),那么我会POST:

{
  "Name": "New item",
  "Group": ???
}

我需要为组指定什么?我想我需要以某种方式通过ID来指代它。当然,我可以在Item实体(GroupId)中包含外键并添加它。我现在就是这样做的,而且很有效,但这是唯一的路吗?我应该做什么?谢谢

张贴具有导航属性的新实体

只需像这样嵌套JSON:

{
    "Name": "New item",
    "Group": 
    { 
        "Id": 5, 
        "Name": "GroupName"
    }
}

这应该有效:

POST http://host/service/Items
{"@odata.type":"#{YourSchemaNameSpace}.Item",
    "ID":111,
    "Name":"New item",
    "Groups@odata.bind":[
        "http://host/service/Groups(123)"
    ]
}

我针对示例服务测试了该模式:http://services.odata.org/V4/(S(读写))/OData/OData.svc/通过如下请求:

POST http://services.odata.org/V4/OData/(S(nycqcplahy351amirlopon50))/OData.svc/Products
{"@odata.type":"#ODataDemo.Product",
    "ID":111,
    "Name":"New product",
    "Categories@odata.bind":[
       "http://services.odata.org/V4/OData/(S(nycqcplahy351amirlopon50))/OData.svc/Categories(1)"
    ]
}

它奏效了。