【问题标题】:How to return complete object graph using WCF Data Services?如何使用 WCF 数据服务返回完整的对象图?
【发布时间】:2012-02-21 14:23:20
【问题描述】:

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

  • 一个模板包含许多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'

我只看到 Root Template 对象 - 它不会带回 整个图表

关于实现这一点的最干净方法的任何想法?

【问题讨论】:

    标签: wcf wcf-data-services odata


    【解决方案1】:

    $expand url 选项对您有用吗?不过,您可能必须切换到查询实体集而不是自定义方法。

    【讨论】:

    • 因为它是递归的,客户不知道对象图可以走多深。在这个特定应用程序的上下文中,一次性返回对象图似乎是最有效的方法。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      相关资源
      最近更新 更多