簡體   English   中英

如何使用 HotChocolate 在 GraphQL 架構中定義具有不可空項目的可空列表?

[英]How to define a nullable list with non-nullable items in a GraphQL schema using HotChocolate?

我正在使用 C# 10,但在 .NET 6 和 HotChocolate 12.12.0 上禁用了可空引用類型。

我的Query.cs有這樣一個條目:

public async Task<List<Foo>> GetFoos() { ... }

生成的 GraphQL 架構如下所示: foos: [Foo] (具有可為空Foo項的可為空數組)

當我將[GraphQLNonNullType]屬性添加到GetFoos()方法時,生成的 GraphQL 模式如下所示: foos: [Foo!]! (具有不可為空的Foo項的不可為空數組)

我希望我的架構看起來像這樣: foos: [Foo!] (具有不可為空的Foo -items 的可空數組)

從我發現的(例如這個答案)來看,這應該是可能的。

HotChocolate 是否提供任何方法來生成具有架構中不可為空項的可為空數組?

是的,這可以使用熱巧克力來實現。

使用基於注釋的方法:

[GraphQLType(typeof(ListType<NonNullType<ObjectType<Foo>>>))]
public async Task<List<Foo>> GetFoos() { ... }

使用代碼優先方法:

descriptor
    .Field("foos")
    .Type<ListType<NonNullType<ObjectType<Foo>>>>();

https://chillicream.com/docs/hotchocolate/defining-a-schema/non-null/#explicit-nullability

一種解決方案是啟用可空引用類型,然后將列表顯式標記為可空。

.csproj文件中啟用可為 null 的引用類型:

<Nullable>enable</Nullable>
public async Task<List<Foo>?> GetFoos() { ... }

為了不更改整個項目的此設置(因為這可能會破壞內容), 可空指令可用於僅在代碼的某些部分啟用此功能:

#nullable enable
public async Task<List<Foo>?> GetFoos() { ... }
#nullable disable

不要忘記再次禁用它,否則它也會影響下面的任何其他代碼。

雖然這暫時解決了我的問題,但如果有不啟用可空引用類型的解決方案,我仍然會感興趣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM