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

发布于 2025-01-07 20:47:07 字数 1442 浏览 0 评论 0原文

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

  • 一个 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 技术交流群。

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

发布评论

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

评论(2

吃→可爱长大的 2025-01-14 20:47:07

$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.

哑剧 2025-01-14 20:47:07

据我所知,这是不可能完成的。最好的情况是,您可以拦截针对服务操作的请求并重定向到带有完整扩展的 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.

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