如何使用 WCF 数据服务返回完整的对象图?
我有一个本质上是递归的类模型。为了简洁起见,我将其描述为:
- 一个 Template 包含许多 Socket 对象
- 一个 Socket 接受许多 Template 对象
我通常会得到如下所示的对象图:
Root Template
|--> Sockets
|--> Socket S1
| |--> Templates
| |--> Template T1
| |--> Template T2
| |--> Sockets
| |--> Socket S1.1
|--> Socket S2
|--> Templates
|--> Template T2 <-- it's valid to reuse templates
|--> Template T3
etc
我想通过 WCF 数据服务一次性返回整个对象图。
我已向 DataService 添加了一个自定义方法来构建完整的图:
[WebGet]
public IEnumerable<Template> GetFullyExpandedTemplate(Guid templateId)
{
var result = _templateRepo.GetFullyExpandedTemplate(a => a.Id == templateId);
return new List<Template>() { result };
}
结果肯定是完全填充的(已验证 .但是,如果我浏览到以下内容:
http://localhost/MySite/MyDataService.svc/GetFullyExpandedAggregate?id=guid'353934DD-916E-43EC-9CAE-EAB8FA894EBA'
我只看到根模板对象 - 它不会返回整个图表
关于最干净的任何想法 。 em> 如何实现这一点?
I have a class model that is recursive in nature. For brevity, I'll describe it as:
- A Template contains many Socket objects
- A Socket accepts many Template objects
I typically end up with object graphs that look like this:
Root Template
|--> Sockets
|--> Socket S1
| |--> Templates
| |--> Template T1
| |--> Template T2
| |--> Sockets
| |--> Socket S1.1
|--> Socket S2
|--> Templates
|--> Template T2 <-- it's valid to reuse templates
|--> Template T3
etc
I want to return the entire object graph via WCF Data Services in one shot.
I've added a custom method to my DataService that builds the full graph:
[WebGet]
public IEnumerable<Template> GetFullyExpandedTemplate(Guid templateId)
{
var result = _templateRepo.GetFullyExpandedTemplate(a => a.Id == templateId);
return new List<Template>() { result };
}
The result is definitely fully populated (verified . But if I browse to the following:
http://localhost/MySite/MyDataService.svc/GetFullyExpandedAggregate?id=guid'353934DD-916E-43EC-9CAE-EAB8FA894EBA'
I only see the Root Template object - it doesn't bring back the entire graph.
Any ideas on the cleanest way to make this happen?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
$expand url 选项对您有用吗?不过,您可能必须切换到查询实体集而不是自定义方法。
Would the $expand url option work for you? You might have to switch to querying on an entity set instead of a custom method though.
据我所知,这是不可能完成的。最好的情况是,您可以拦截针对服务操作的请求并重定向到带有完整扩展的 URI,但扩展路径仍然是静态的。
It can't be done AFAIK. At best, you could intercept requests against the service op and redirect to a URI w/ the full expansion, but the expand paths would still be static.