Как читать значение с помощью 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 для страны.
Может ли кто-нибудь помочь мне узнать, как решить эту проблему?