我正在努力寻找一个如何在涉及导航属性时为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)中包含外键并添加它。这就是我现在正在做的事情,它有效,但这是唯一的方法吗? 应该我在做什么?感谢。
答案 0 :(得分:2)
像这样嵌套你的JSON:
{
"Name": "New item",
"Group":
{
"Id": 5,
"Name": "GroupName"
}
}
答案 1 :(得分:0)
这应该有效:
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(readwrite))/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)"
]
}
并且有效。