[英]Copy a Nullable property to a non-Nullable version using Reflection
[英]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.