WCF oData 数据服务 WebInvoke (POST) 链接实体

发布于 2024-11-27 20:32:26 字数 643 浏览 0 评论 0原文

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

例如。我有一个具有 ID 和名称的父实体,以及具有 ID、ParentID 和名称的子实体。

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

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

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

First of all I am new to .NET WCF oData DataService and I am using jQuery on the client side.
I am looking for a better way (right way) to handle adding 2 different entities in one transaction (post).

Eg. I have a Parent entity with ID and Name and Child entity with ID,ParentID and Name.

I would like to add parent and get parent's id and use it to add each child. However, while adding either the parent or one of the child entity fails, then it should roll back all the transactions.
One way, I thought of doing it is by creating a WebInvoke Method which would take a json string like this {"Parent":{"name":"Daddy"},"Children":[{"name":"Tom"},{"name":"Dick"},{"name":"Harry"}]}
While testing I hardcoded argument in the method, on invoke everything worked fine. However, when calling POST from jQuery, the parameter comes in as NULL (annoying).
I was able to send parameter to the method by passing the urlencoded json string as part of query string. However, query string has size limit and I prefere not to use it.

Question 1) Is it possible to use WebInvoke POST with parameter(s) in WCF Data Service?
Question 2) Is there a better way (right way) to do what I am trying to do.

Another way of doing it (I don't like it) is to call POST on parent entity and get its ID and using it to post for each child. If one of it fails then call delete for all.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

疾风者 2024-12-04 20:32:26

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

Currently the service operation (the WebInvoke method) doesn't support passing parameters in the request body, only in the URL.
The right solution for this is to use batching. The client can send all the operations in a single batch request (with a single changeset in it) and then the server will try to apply them and if one of them fails the entire changeset is rolled back.
Creating a batch payload is a bit complicated but there's a java script library datajs which will help you with that. In fact it will help you with the OData protocol all up. http://datajs.codeplex.com/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文