如何使用WCF数据服务返回完整的对象图?

时间:2012-02-21 14:23:21

标签: wcf wcf-data-services odata

我有一个本质上递归的类模型。为简洁起见,我将其描述为:

  • 模板包含许多套接字对象
  • 套接字接受许多模板对象

我通常最终得到的对象图如下所示:

  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'

我只看到根模板对象 - 它不会带回整个图形

关于最干净方法的任何想法都可以实现这一目标吗?

2 个答案:

答案 0 :(得分:0)

$ expand url选项是否适合您?您可能必须切换到实体集上的查询而不是自定义方法。

答案 1 :(得分:0)

无法完成AFAIK。充其量,您可以拦截针对服务操作的请求并重定向到具有完全扩展的URI,但扩展路径仍然是静态的。