我为关系表创建了OData服务。我试图弄清楚我的帖子查询在发布到具有外键关系的表时的样子,以及减少调用次数。
示例表是:
人
住宅
为了创建新的入住表入口,通常我会根据姓名或电子邮件地址找出PersonID
,然后插入Residence
表。
如何通过单次调用使用我的OData JSON api完成相同的操作?可能吗?我正在使用小提琴手测试服务。
提前致谢。
-ap
答案 0 :(得分:2)
一般来说,在OData中没有一个非常好的方法 - 但不要停止阅读,我会解释原因并提供一些建议。
在生产过程中你应该三思而行是因为插入过程的脆弱性。如果数据库中有两个同名的人,会发生什么?如果没有人有这个名字怎么办?如果你拼错了名字怎么办?你会为重复项抛出HTTP错误吗?他们是否必须重试插入? < - 本质上,出现了大量问题,因为用户实际上没有选择特定记录来绑定到新记录。如果您在前面选择Person
,只需插入带有Residence
绑定的新PersonID
,此过程就会大大简化。在OData的新JSON格式中,它看起来像这样:
{
"odata.type": "My.User",
"ReferredBy@odata.bind": "http://.../MyService.svc/Users('haoche')",
"BillingAddress": {
"odata.type": "My.Address",
"City": "Clinton",
"Line1": "23456 Cleveland St",
"Line2": null,
"State": "TX",
"ZipCode": "98052"
},
"DisplayName": "David Hamilton",
"FavoriteTags": [],
"JoinedAt": "2012-10-05T14:14:43.1229977-07:00",
"LastSeenAt": "2012-10-05T14:14:43.1269991-07:00",
"UserID": "davham"
}
"ReferredBy@odata.bind"
是您输入要链接的人的ID的位置。如果您没有使用新的OData格式,则有效负载将look like this(参见示例2)。无耻的插件:这就是你应该使用新的JSON格式的原因:)。
所以我的主要建议是,我会强烈建议您让用户先查看数据,而不是尝试将两个操作合并为一个。但是,如果您真的开始执行一项操作,则可以使用服务操作或操作来执行此操作,具体取决于您使用的OData版本。