【问题标题】:Are custom repository instances created per request?是否根据请求创建自定义存储库实例?
【发布时间】:2019-08-24 04:18:43
【问题描述】:

我正在尝试使用 mikro-orm 和 apollo-server-express 创建一个应用程序,我想使用 Facebook 数据加载器的批处理和缓存。

通常,Facebook 数据加载器实例是根据请求创建的。如果 mikro-orm 还为每个请求创建自定义存储库实例,并且如果在同一请求中对 EntityManager.getRepository() 的所有调用都获得相同的实例,那么它可能是创建数据加载器实例的理想场所。

【问题讨论】:

    标签: mikro-orm


    【解决方案1】:

    存储库是作为单例创建的,因此每个 EntityManager 实例仅存在一个实例。您应该手动或通过RequestContext 中间件分叉此 EM,以便每个请求拥有一个实例:

    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);
    

    【讨论】:

      猜你喜欢
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 2013-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多