1

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

示例表是:

  • 个人ID
  • 姓名
  • 电子邮件地址

住宅

  • 居住证
  • 个人ID
  • 地址

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

如何使用我的 OData JSON api 进行一次调用来完成相同的操作?可能吗?我正在使用提琴手来测试服务。

提前致谢。

-ap

4

1 回答 1

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 格式,则有效负载将如下所示(参见示例 2)。无耻插件:这就是为什么你应该使用新的 JSON 格式:)。

所以我的主要建议是,我真的强烈建议您让用户先查找数据,而不是尝试将两个操作合并为一个。但是,如果您真的打算进行一项操作,则可以使用服务操作或操作来执行此操作,具体取决于您使用的 OData 版本。

于 2012-10-15T23:47:14.533 回答