张贴具有导航属性的新实体
本文关键字:实体 新实体 导航 属性 张贴具 | 更新日期: 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)"
]
}
它奏效了。