Создаются ли пользовательские экземпляры репозитория для каждого запроса? - PullRequest
2 голосов
/ 02 апреля 2019

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

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

1 Ответ

0 голосов
/ 03 апреля 2019

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

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...