【发布时间】: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