WCF oData dataservice WebInvoke(POST)链接实体

时间:2011-08-04 17:27:35

标签: c# wcf jquery odata wcf-data-services

首先,我是.NET WCF oData DataService的新手,我在客户端使用jQuery。 我正在寻找一种更好的方法(正确的方法)来处理在一个事务(post)中添加2个不同的实体。

EG。我有一个带有ID和名称的Parent实体以及带有ID,ParentID和Name的子实体。

我想添加父项并获取父项的ID,并使用它来添加每个孩子。但是,在添加父实体或其中一个子实体失败时,它应该回滚所有事务。 一种方法,我想这样做是通过创建一个WebInvoke方法,它将采用像这样的json字符串{“Parent”:{“name”:“Daddy”},“Children”:[{“name”:“Tom” },{ “名”: “迪克”},{ “名”: “哈利”}]} 在测试我在方法中硬编码的参数时,在调用时一切正常。但是,从jQuery调用POST时,参数为NULL(烦人)。 我能够通过传递urlencoded json字符串作为查询字符串的一部分来向参数发送参数。但是,查询字符串有大小限制,我不想使用它。

问题1)是否可以在WCF数据服务中使用带有参数的WebInvoke POST? 问题2)有没有更好的方法(正确的方法)去做我想做的事情。

另一种方法(我不喜欢它)是在父实体上调用POST并获取其ID并使用它为每个子项发布。如果其中一个失败,则为所有人调用delete。

1 个答案:

答案 0 :(得分:1)

目前,服务操作(WebInvoke方法)不支持在请求正文中传递参数,仅支持在URL中传递参数。 对此的正确解决方案是使用批处理。客户端可以在单个批处理请求中发送所有操作(其中包含一个变更集),然后服务器将尝试应用它们,如果其中一个失败,则回滚整个变更集。 创建批处理有效负载有点复杂,但有一个java脚本库datajs可以帮助您。事实上,它将帮助您完成OData协议。 http://datajs.codeplex.com/