0

我正在做一个项目,我们需要建立非可选的连接,但我真的找不到任何关于这个主题的东西。我使这些字段与 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);
            });
4

1 回答 1

0

我也偶然发现了这个问题。我通过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 => /*...*/);
于 2021-07-15T19:27:13.567 回答