Как мне заставить вложенные загрузчики данных Graphql Hot Chocolate правильно выполнять пакетную обработку?C#

Место общения программистов C#
Ответить
Anonymous
 Как мне заставить вложенные загрузчики данных Graphql Hot Chocolate правильно выполнять пакетную обработку?

Сообщение Anonymous »

У меня есть запрос GraphQL, который выглядит следующим образом:

Код: Выделить всё

query {
vehiclesByIds(ids: 1,2,3,4,5...) {
id
options {
optionId
name
adCopy {
copyType
copyText
}
}
}
}
copyText обрабатывается с помощью преобразователя, который возвращает переведенный текст из объекта перевода (он получает используемый язык из заголовков HTTP).

Код: Выделить всё

public Task GetCopyTextAsync(
[Parent] CopyInfo parent,
[Service] ILanguageService languageService,
[Service] IAdCopyTranslatedTextByIdDataLoader dataLoader)
{
if (parent != null && parent.CopyTextId > 0)
{
return dataLoader.LoadAsync(parent.CopyTextId);
}

return Task.FromResult(string.Empty);
}
Загрузчик данных загружает записи перевода по идентификатору:

Код: Выделить всё

[DataLoader]
public static async Task GetAdCopyTranslatedTextByIdAsync(
IReadOnlyList keys,
[Service] AppDbContext context,
[Service] ILanguageService languageService,
CancellationToken cancellationToken)
{
var languageId = languageService.LanguageId ?? 1;
return await context.AdCopyTranslationTexts
.Where(x => keys.Contains(x.TranslationId) && x.LanguageId == languageId)
.ToDictionaryAsync(x => x.Id, x => x.TranslatedText, cancellationToken);
}
Проблема, с которой я столкнулся, заключается в том, что при запуске загрузчик данных запускается один раз для каждого транспортного средства, а не фактически объединяет их вместе, что может привести к десяткам вызовов базы данных. Если я просто запросю эти объекты adCopy следующим образом:

Код: Выделить всё

query {
adCopy {
copyType
copyText
}
}
Он выполняет одиночный поиск в копируемых записях. Разве Hot Chocolate не поддерживает подобные загрузчики данных? Я думал, что в этом и заключается смысл загрузчиков данных — группировать данные, а не выполнять множество отдельных вызовов данных.

Подробнее здесь: https://stackoverflow.com/questions/798 ... h-properly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»