Jer*_*ell 7 json wcf-data-services odata
我正在尝试使用WCF数据服务提供的OData服务来实现我认为的简单场景(使用OData V3应用程序/ json; odata =详细的有效载荷格式,现在.我将来可能会使用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; }
}
Run Code Online (Sandbox Code Playgroud)
现在,我想为Person创建一个简单的编辑页面.此编辑页面可能具有Name的输入,以及Person类别的输入或下拉列表.
所以,场景如下:
这里的关键是"单一请求".这是我找不到文档的部分.我见过他们将上面的数字3分成两个请求的例子.这样的事情(我不记得确切的格式 - 我也不确定你在做PUT之前是否必须删除Category链接):
PATCH /api.svc/People(1) with content: {"Name": "new name" }
PUT /api.svc/People(1)/$links/Category with content: { "url": "/api.svc/Categories(2)" }
Run Code Online (Sandbox Code Playgroud)
但是,我也听说过,但没有证明,可以将此更新实现为单个请求,并更改为与Person实体的其他更改内联指定的Category导航属性.有人能给我一个如何做到这一点的例子吗?另外,您能告诉我如何使用多对多导航属性,而不是我上面描述的一对多导航属性.
最后,我目前正在使用详细的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)" }
Pratik 的评论就是答案(Pratik 如果您想将其重新发布为答案,我会将其标记为这样 - 谢谢!):
\n\n\n\n问题:您想要更新类别实例还是想要更新类别实例的某些属性。除了批处理之外,没有其他办法可以做到后者。对于前者,您可以执行以下操作:{ "Name" : "new name", "Category" : { "__metadata" : { "uri" : "/api.svc/Categories(2)" }}}。希望这可以帮助。\xe2\x80\x93 普拉蒂克
\n