【问题标题】:"Derived" field resolver for GraphQL using Hot Chocolate and EFCore使用 Hot Chocolate 和 EFCore 的 GraphQL 的“派生”字段解析器
【发布时间】:2021-09-30 22:08:54
【问题描述】:

我正在使用 ASP.NET 5、Hot Chocolate 和 EFCore 5 开发 GraphQL 端点。我有实体框架实体,我使用 Hot Chocolate 在 GraphQL 中公开这些实体。我需要“派生”其中一个字段。例如,我有一个名为employee 的类,它具有FirstName 和LastName 属性。我希望 GraphQL 端点为员工公开一个“全名”字段,该字段将在内部连接名字和姓氏。请注意,FirstName 和 LastName 值作为 Employee 数据库表的列存在,但将派生“FullName”字段。我该怎么做呢?我尝试如下,但它不起作用 -

    public class EmployeeType : ObjectType<Employee>
    {
        protected override void Configure(IObjectTypeDescriptor<Employee> descriptor)
        {
            descriptor.Field(@"FullName")
                .Type<StringType>()
                .ResolveWith<Resolvers>( p => p.GetFullName(default!, default!) )
                .UseDbContext<AppDbContext>()
                .Description(@"Full name of the employee");
        }

        private class Resolvers
        {
            public string GetFullName(Employee e, [ScopedService] AppDbContext context)
            {
                return e.FirstName + " " + e.LastName;
            }
        }
    }

FullName 字段确实显示在 GraphQL 查询中,但它始终为空白。我认为传递给 GetFullName() 的 Employee 实例 e 的名字和姓氏为空字符串值。

我该如何解决这个问题?这是解决问题的正确方法吗?

【问题讨论】:

  • 我的实现看起来和你的类似,只是我还没有使用 StringType。我做了一些实验(也用 StringType),但找不到你的代码有什么问题。您是否尝试过 BananaCake Popup 来评估查询 - 它说明了该字段的什么内容。我唯一的理论是措辞可能会有所不同(“fullName”与“FullName”)。省略 [Parent] 对我没有任何影响,但无论如何添加它是个好主意(请参阅 Tobias Tengler 的回答)。

标签: c# graphql hotchocolate


【解决方案1】:

虽然我自己不经常使用ResolveWith,但我很确定您必须使用ParentAttribute 注释Employee

public string GetFullName([Parent] Employee e, [ScopedService] AppDbContext context)
{
    return e.FirstName + " " + e.LastName;
}

Learn more about this in the resolver documentation

【讨论】:

  • 为我工作谢谢!
  • 使用此方法,FirstName 和 LastName 必须包含在原始 graphQL 查询中,否则它们的值为 null。无论如何确保在查询 FullName 时始终包含这些依赖字段?
  • @PeterKerr 你找到答案了吗?我也面临类似的问题。
  • 您可以通过IsProjected(true) 标记应始终投影到数据源的字段。没有一个API尚未定义依赖关系,如“始终和仅项目Y,选择x”。 span>
  • 感谢@TobiasTengler,该功能可能会很快添加吗?
猜你喜欢
  • 2022-08-18
  • 1970-01-01
  • 2022-11-11
  • 2021-01-07
  • 2020-07-18
  • 2022-11-14
  • 2022-07-31
  • 2020-10-07
  • 2022-08-19
相关资源
最近更新 更多