Odata将数据插入关系表

时间:2012-10-15 18:28:28

标签: service odata foreign-key-relationship relational

我为关系表创建了OData服务。我试图弄清楚我的帖子查询在发布到具有外键关系的表时的样子,以及减少调用次数。

示例表是:

  • PersonID
  • 姓名
  • EmailAddress的

住宅

  • ResidenceID
  • 是PersonID
  • 地址

为了创建新的入住表入口,通常我会根据姓名或电子邮件地址找出PersonID,然后插入Residence表。

如何通过单次调用使用我的OData JSON api完成相同的操作?可能吗?我正在使用小提琴手测试服务。

提前致谢。

-ap

1 个答案:

答案 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版本。