【问题标题】:Can I make connections NonNullable in GraphQL .NET?我可以在 GraphQL .NET 中建立连接 NonNullable 吗?
【发布时间】:2021-07-16 03:27:13
【问题描述】:

我正在处理一个项目,我们需要在其中建立非可选连接,但我真的找不到任何关于该主题的内容。 我使这些字段与 NonNullableGraphType 一起工作,如下所示,但我没有运气让连接不可为空。 我已经进行了广泛搜索,找不到任何关于这个问题的信息,所以我希望有人能在这里帮助我,因为我完全迷路了。 不可为空的字段是这样写的:

        Field<NonNullGraphType<OrderPresetGraphType>>(
            "preset",
            resolve: context => {
                var loader = dataLoader.Context.GetOrAddBatchLoader<int, Base.Entities.Orders.OrderPreset>(
                    "OrderPresetById", orderPresetController.GetOrderPresetsByIdAsync
                );

                return loader.LoadAsync(context.Source.PresetId);
            }
        );

遗憾的是,同样的方法不适用于列表。 非常感谢任何帮助!

编辑 我目前解决这个问题的尝试如下所示:

        Connection<NonNullGraphType<AssetFilterPresetFieldGraphType>>()
            .Name("fields")
            .Unidirectional()
            .Description("Returns a list of AssetFilterPresetFieldGraphType connected to this AsetFilterPresetGraphType")
            .ResolveAsync(async context =>
            {
                var result = await assetFilterPresetController.GetFilterPresetFieldsByIdAsync(context.Source.Id)
                    .ConfigureAwait(false);

                return ConnectionResolver.ToConnection(result.Data, context);
            });

【问题讨论】:

    标签: graphql-dotnet


    【解决方案1】:

    我也偶然发现了这个问题。我通过使用扩展方法用NonNullableGraphType 包装当前类型来解决。

    public static ConnectionBuilder<TSource> NonNullable<TSource>(
        this ConnectionBuilder<TSource> builder
    )
    {
        builder.FieldType.Type = typeof(NonNullGraphType<>).MakeGenericType(builder.FieldType.Type);
        return builder;
    }
    

    像这样使用它:

    Connection<UserGraphType>()
        .Name("users")
        .NonNullable()
        .Resolve(ctx => /*...*/);
    

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-20
      • 2019-05-27
      • 2015-05-15
      • 1970-01-01
      相关资源
      最近更新 更多