Как читать значение с помощью Dataloader с GraphQL.NET и ASP.NET Core?

Я использую asp.net core 2.2, Microsoft.EntityFrameworkCore(2.2.4), GraphQL.NET для разработки API на основе GraphQL.

Я пытаюсь получить данные для поля с помощью загрузчика данных.

Вот мой код:

CountryDTO.cs

    public class CountryDTO
    {
        public int PNGImageId { get; set; }
        [JsonProperty("pngimagePath")]
        [RegularExpression(Constants.GeneralStringRegularExpression)]
        public string PNGImagePath { get; set; } = "";
        public int SVGImageId { get; set; }
        [JsonProperty("svgimagePath")]
        [RegularExpression(Constants.GeneralStringRegularExpression)]
        public string SVGImagePath { get; set; } = "";
        [RegularExpression(Constants.GeneralStringRegularExpression)]
        public string DisplayName { get; set; } = "";
        [RegularExpression(Constants.GeneralStringRegularExpression)]
        public string DisplayNameShort { get; set; } = "";
        [RegularExpression(Constants.GeneralStringRegularExpression)]
        public string ProviderName { get; set; } = "";
        [RegularExpression(Constants.GeneralStringRegularExpression)]
        public string ProviderTerms { get; set; } = "";
        public int Uuid { get; set; }
        [RegularExpression(Constants.GeneralStringRegularExpression)]
        public string Name { get; set; } = "";
        [RegularExpression(Constants.GeneralStringRegularExpression)]
        public string Path { get; set; } = "";
        public bool CompleteResponse { get; set; }    
    }



public class CountryType : ObjectGraphType<CountryDTO>, IGraphQLType
{
    public CountryType(IImageService imageService, IDataLoaderContextAccessor dataLoaderContextAccessor)
    {
        Name = "Country";
        Field<StringGraphType>("pngimagepath", resolve: context =>
        {
            var loader = dataLoaderContextAccessor.Context.GetOrAddCollectionBatchLoader<int, Images>("GetPngImagePath", imageService.GetImageAsync);
            return loader.LoadAsync(context.Source.PNGImageId);
        }

        );
        Field(x => x.SVGImagePath, nullable: true);
        Field(x => x.DisplayName, nullable: true);
        Field(x => x.DisplayNameShort, nullable: true);
        Field(x => x.Uuid, nullable: true);
    }
}

public interface IImageService
{
   Task<ILookup<int, Images>> GetImageAsync(IEnumerable<int> imageIds);
}

public class ImageService : IImageService
{
    private readonly TaxathandDbContext _dbContext;
    public ImageService(TaxathandDbContext dbContext)
    {
        _dbContext = dbContext ?? throw new ArgumentNullException(nameof(dbContext));
    }

    public async Task<ILookup<int, Images>> GetImageAsync(IEnumerable<int> imageIds)
    {
        var images = await _dbContext.Images.Where(im => imageIds.Contains(im.ImageId)).ToListAsync();
        return images.ToLookup(img => img.ImageId);
    }
}

Здесь я пытаюсь получить путь к pngimagepath для страны.

Может ли кто-нибудь помочь мне узнать, как решить эту проблему?

0 ответов

Другие вопросы по тегам