2012-10-15 57 views
1

我已经为关系表创建了OData服务。我试图找出发布到具有外键关系的表以及减少调用次数时,我的发布查询的外观。将数据插入关系表的Odata

实施例表是:

  • PERSONID
  • 名称
  • EmailAddress的

住宅

  • ResidenceID
  • PERSONID
  • 地址

为了创造新进入住宅表,通常我会发现,基于姓名或电子邮件地址PersonID,然后插入Residence表。

如何使用我的OData JSON API与单个调用完成相同的操作?可能吗?我正在使用提琴手来测试服务。

在此先感谢。

-ap

回答

2

一般情况下,有没有在的OData这样做一个真正的好办法 - 但不要停止阅读,我会解释原因,并提供了一些建议。

在生产中这样做应该三思而后行的原因是因为插入过程的脆弱性。如果数据库中有两个同名的人,会发生什么情况?如果没有人使用这个名字怎么办?如果你拼错了名字怎么办?你会抛出一个HTTP错误的重复?他们是否需要重试插入? < - 实质上,出现了很多问题,因为用户实际上没有选择特定记录来绑定新记录。如果您事先选择了Person,并且只需插入新的Residence并绑定到PersonID,就可以大大简化此过程。在新的JSON格式的OData,这将是这个样子:

{ 
    "odata.type": "My.User", 
    "[email protected]": "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" 
} 

"[email protected]"是,你把你链接到该人的ID。如果您未使用新的OData格式,则有效负载将为look like this(请参见示例2)。无耻的插件:这就是为什么你应该使用新的JSON格式:)。

因此,我的主要建议是,我真的会强烈建议您让用户先查看数据,而不是试图将两个操作合并为一个。但是,如果您真的开始进行一项操作,则可以通过服务操作或操作来完成此操作,具体取决于您使用的OData版本。

+0

这绝对回答我的问题。非常感谢 – user1664338