Могу ли я сделать соединения ненулевыми в GraphQL .NET?

#graphql-dotnet

#graphql-dotnet

Вопрос:

Я работаю над проектом, в котором нам нужно устанавливать необязательные соединения, и я ничего не могу найти по этому вопросу. Я заставил поля работать с 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);
            });
 

Ответ №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 => /*...*/);