Создаются ли пользовательские экземпляры репозитория для каждого запроса?
Я пытаюсь создать приложение с помощью 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);