首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在GraphQL.NET中构建分层对象树

在GraphQL.NET中构建分层对象树
EN

Stack Overflow用户
提问于 2019-10-09 14:39:24
回答 1查看 201关注 0票数 0

我正在构建一个API,它允许您在GraphQL中获取分层对象树。这些对象不在数据存储中,而是来自一些上游API。例如:

代码语言:javascript
复制
public class Employee
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string Surname { get; set; }
    public int ManagerId { get; set; }
}

我想用一个引用管理器的实际Employee对象替换ManagerId属性。我走了这么远;

代码语言:javascript
复制
class EmployeeType : ObjectGraphType<Employee>
{
    Field(x => x.Id);
    Field(x => x.FirstName);
    Field(x => x.Surname);

    Field<EmployeeType>(
        "manager",
        arguments: new QueryArguments(new QueryArgument<IdGraphType> { Name = "id" }),
        resolve: context =>
        {
            int id = context.GetArgument<int>("id");
            return GetEmployeeById(id);
        });
}

这个想法是有一个为管理器定制的解析器,它将去并从API中获取它。问题是调用此API的人需要显式传入ID,如下所示;

代码语言:javascript
复制
POST /employees
{
  Employee(id: 1234) {
    id,
    firstName,
    lastName,
    manager(id: 5432) {
      firstName,
      lastName
    }
  }
}

这是行不通的,因为他们首先需要知道经理的ID是什么,然后才能执行这个查询。如何分阶段执行这个GraphQL查询,首先获取employee对象,然后在知道他或她的ID后获取经理对象?此外,如何将父对象的上下文向下传递到解析器中,以便它可以获得ID属性?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-09 23:11:31

我找到答案了!我可以使用Source属性获取父对象。现在我不需要在解析器中为EmployeeType指定任何参数;我可以这样做:

代码语言:javascript
复制
    Field<EmployeeType>(
        "manager",
        resolve: context =>
        {
            int id = context.Source.ManagerId;
            return GetEmployeeById(id);
        });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58298369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档