HotChocolate 突变输入类型使用 int 而不是 ID

Posted

技术标签:

【中文标题】HotChocolate 突变输入类型使用 int 而不是 ID【英文标题】:HotChocolate mutation input type uses int instead of ID 【发布时间】:2022-01-13 23:55:37 【问题描述】:

我是 HotChocolate 和 GraphQL 的新手,我正在努力掌握如何为我的 GraphQL API 启用节点和/或中继支持。目前使用 HotChocolate v12。

上下文 我正在尝试创建一个更新实体的突变(Client 在本例中)。我在这里使用代码优先方法并具有以下内容:

    输入记录/类定义如下:
public record UpdateClientInput([ID(nameof(Client))] int Id, string Code, string Name, string Subdomain);
    返回载荷类的变异函数:
[UseAppDbContext]
public async Task<UpdateClientPayload> UpdateClientAsync(UpdateClientInput input, [ScopedService] AppDbContext context)

    var client = await context.Set<Client>().FirstOrDefaultAsync(x => x.Id == input.Id);
                    
    // cut for brevity
                    
    return new UpdateClientPayload(client);

    我已通过在服务配置中添加它来启用对节点的支持:
builder.Services
    .AddGraphQLServer()
        .AddQueryType(d => d.Name("Query"))
        .AddMutationType(d => d.Name("Mutation"))
        // removed others for brevity      
        .AddGlobalObjectIdentification()
        .AddQueryFieldToMutationPayloads();

但是当我使用 Banana Cake Pop 浏览 API 时,架构定义中的 UpdateClientInput 对象仍然使用 int 而不是 ID!(见下面的屏幕截图)。所以我使用的 GraphQL 客户端(Strawberry Shake)会生成不使用 ID! 类型的输入对象。我在这里遗漏了什么吗?

【问题讨论】:

【参考方案1】:

所以为了解决这个问题,这实际上是 HotChocolate v12 中的一个更改,其中记录应该使用 [property: ID] 而不是 [ID] 属性。该更改可在此处找到 https://chillicream.com/docs/hotchocolate/api-reference/migrate-from-11-to-12#records。

我所做的是将记录声明从:

public record UpdateClientInput([ID(nameof(Client))] int Id, string Code, string Name, string Subdomain);

public record UpdateClientInput([property: ID] int Id, string Code, string Name, string Subdomain);

将这个输入对象生成为:

【讨论】:

以上是关于HotChocolate 突变输入类型使用 int 而不是 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 GraphQL 突变进行更新(热巧克力)

带有嵌套类型的 Graphql 突变?

.NET HotChocolate 泛型类型分页

在不同的突变中使用相同对象的输入类型

HotChocolate 没有正确映射模型以输入

HotChocolate GraphQL 中的类型继承