繁体   English   中英

GraphQl .NET DateGraphType CLR 类型映射问题

[英]GraphQl .NET DateGraphType CLR Type Mapping Issue

从 v4-v7 升级我的 GraphQL.NET 版本后,我遇到了一个我似乎无法解决的问题。 该解决方案也在我最近升级的 .NET 7 上运行。

我试图在迁移指南中寻找解决这些错误的方法,但我一定遗漏了一些东西。 目前,我引用的 DateGraphType 也可为空的任何代码都会引发以下错误:

无法隐式派生参数“DateMutations.updateDate.value”的 GraphQL 类型。 找不到从 CLR 类型“GraphQL.Types.DateGraphType”到 GraphType 的类型映射。 您是否忘记使用“ISchema.RegisterTypeMapping”注册类型映射?

以下是现场代码的样子:

            Field<BooleanGraphType>("updateDate")
                .Argument<DateGraphType>("newDate", true)
                .Argument<int>("id")
                .Resolve()
                .WithScope()
                .WithService<IMediator>()
                .ResolveAsync(UpdateDateResolver);

如果我删除暗示这是一个可为 null 的参数的代码片段,如下所示:

            Field<BooleanGraphType>("updateDate")
                .Argument<DateGraphType>("newDate")
                .Argument<int>("id")
                .Resolve()
                .WithScope()
                .WithService<IMediator>()
                .ResolveAsync(UpdateDateResolver);

我的架构继续“生成”,并在架构中的其他地方找到下一个参数,该参数的类型为 DateGraphType,可空选项传入为 true。 如果未传递可空参数,则解决方案中的 arguments 中的 rest 有效。

重申一下,在我从 v4 升级之前,所有这些代码都可以正常工作,所以我认为它一定是我在迁移指南中遗漏的内容。

我想到了。 在过渡到 GraphQL v7 之后,他们将 CLR 类型添加到参数 generics 中,并通过我进行了一点循环。

使用语法时

.Argument<TGraphType>("name")

它默认为可以为空,一如既往。 要获得不可为 null 的类型,您必须执行以下操作。

.Argument<NonNullGraphType<TGraphType>("name")

但是,随着 CLR 类型的增加,它们的语法略有不同,类似于.Field(x => x, true)的 Field 语法。 使用 CLR 类型时,您必须单独传递可空属性。 但是,CLR 类型默认为不可空。

.Argument<TClrType>("name") // defaults as nullable: false

如果您希望 CLR 类型可以为空,则必须传入额外的参数。

.Argument<TClrType>("name", true) // now it's nullable

我最终在 GitHub 回购协议中提出了这个问题作为一个问题,这里有一个链接,在这个链接中向我解释了这个问题,以防您需要更清楚的了解。

https://github.com/graphql-do.net/graphql-do.net/issues/3507

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM