是否根据请求创建自定义存储库实例?
Are custom repository instances created per request?
我正在尝试使用 mikro-orm 和 apollo-server-express 创建一个应用程序,我想使用 Facebook 数据加载器的批处理和缓存。
通常,Facebook 数据加载器实例是根据请求创建的。如果 mikro-orm 还为每个请求创建自定义存储库实例,并且如果同一请求中对 EntityManager.getRepository()
的所有调用都获得相同的实例,那么它可能是创建数据加载器实例的最佳位置。
存储库是作为单例创建的,因此每个 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);
我正在尝试使用 mikro-orm 和 apollo-server-express 创建一个应用程序,我想使用 Facebook 数据加载器的批处理和缓存。
通常,Facebook 数据加载器实例是根据请求创建的。如果 mikro-orm 还为每个请求创建自定义存储库实例,并且如果同一请求中对 EntityManager.getRepository()
的所有调用都获得相同的实例,那么它可能是创建数据加载器实例的最佳位置。
存储库是作为单例创建的,因此每个 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);