OData POST实体创建与扩展

Mar*_*gan 7 post expand odata

我正在尝试同时创建实体和两个子实体的实例.

如果我将以下JSON发布到/ user_objects资源,它很乐意创建父user_object实体和链接的User_object_attribute实体.唯一的问题是我似乎无法扩展结果集以包含新的user_object_attribute所以我有效地拥有user_object的最新版本但我必须从OData服务读取,即另一个服务器命中以便检索user_object_attributes.

在返回时,我有一个整齐地进入子user_object_attribute对象的id,但是如果这个孩子有另一个服务器端生成的字段如created_date会怎么样?然后我还要再次点击OData回购?

我尝试了正确的$ expand查询?$ expand = user_objects_attributes,当创建成功时,我仍然没有返回扩展的结果集.

如果有可能,有人会有任何想法吗?或者是因为它不是因为只有这样才能返回所有子user_object_attributes?

{
   "annotator_id":1,
   "content_type":"content_type",
   "created_date":"2013-02-15T17:20:09.191",
   "guid":"GUID",
   "size_kb":100,
   "title":"Title",
   "updated_date":null,
   "url":"URL",
   "user_object_id":0,
   "user_objects_attributes":[
      {
         "attribute_id":0,
         "name":"name191",
         "user_object_id":0,
         "value":"value191"
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

谢谢,马克.

Ian*_*ams 4

在这里查看 OData V3 规范:

在版本 1.0 和版本 2.0 中,如果插入完全成功,服务器必须返回带有 201(已创建)状态代码的响应以及符合 InsertEntity 请求(第 2.2.7.1.1 节)中指定的语法的响应正文。服务器执行完所有特定于服务器的数据处理规则(验证等)后,响应正文必须包含插入资源的值。在将资源插入服务器之前,服务器可以更改从客户端接收到的资源值。

在版本 3.0 中,响应可能具有 204 状态代码,如 [RFC2616] 中所指定,基于 InsertEntity 请求上的客户端首选项(请参阅 Prefer(第 2.2.5.9 节))。

不太清楚服务器应该做什么...仅返回顶级创建的实体,或者该实体及其所有扩展链接。

我并不惊讶 $expand 对 POST (或任何 CUD 请求)没有影响。如果它不是查询,WCF DS 可能会忽略它。根据规范,这可能是正确的。

坦率地说,我认为使用 WCF DS Server 您无法获得任何其他回报。在 V3 中,您要么得到 201 与您的实体(仅),要么得到 204 无内容(如果您指定标头表示您不需要任何内容​​)。

这是否符合 OData 标准...不完全确定:-)。无论如何,我认为您目前无法在 WCF DS 堆栈上获得您想要的东西。