Создаются ли пользовательские экземпляры репозитория для каждого запроса?

Я пытаюсь создать приложение с помощью mikro-orm и apollo-server-express, я хочу использовать пакетную обработку и кеширование загрузчика данных Facebook.

Обычно экземпляры загрузчика данных Facebook создаются по запросу. Если mikro-orm также создает пользовательские экземпляры репозитория для каждого запроса и если все вызовы EntityManager.getRepository() в том же запросе получается тот же экземпляр, это может быть идеальным местом для создания экземпляров загрузчика данных.

1 ответ

Решение

Репозитории создаются как синглтоны, поэтому существует только один экземпляр EntityManager пример. Вы должны разветвить этот EM, чтобы иметь один экземпляр на запрос, либо вручную, либо через RequestContext промежуточный слой:

https://b4nan.github.io/mikro-orm/identity-map/

Таким образом, у каждого запроса будет свой EntityManager, который будет иметь свой собственный кэш экземпляров репозитория.

Имейте в виду, что если вы используете RequestContext, вы должны получить конкретный запрос EntityManager оттуда, и получить хранилище оттуда:

// beware that this will return null if the context is not yet started
const em = RequestContext.getEntityManager();

// gets request specific repository instance
const repo = em.getRepository(Book);
Другие вопросы по тегам