1

让我们得到一个根模块,例如:

@Module({
  imports: [MikroOrmModule.forRoot({
    metadataProvider: TsMorphMetadataProvider,
    entities: ['dist/**/*.entity.js'],
    entitiesTs: ['src/**/*.entity.ts'],
    type: 'postgresql' as const,
    baseDir: path.resolve(__dirname, '..'),
    ...        
  })],
})
export class AppModule {}

使用此设置,我可以注入EntityManager,但@InjectRepository(User)找不到提供程序。

@Injectable()
export class SomeService {

  constructor(@InjectRepository(user) userRepository: EntityRepository<User>) {}

}

如果我也插入MikroOrmModule.forFeature([User])根模块,它就不起作用。如果我将实体移动到一个子模块中并.forFeature在那里使用(就像文档中的示例一样)它可以工作。

是否可以@InjectRepository()在不需要子模块和手动引用的情况下工作?由于我已经找到了带有 blob 的实体,因此再次手动引用它们似乎违背了 blob 模式的目的。

4

1 回答 1

0

blob 模式是告诉 ORM 有什么所有实体以及有什么连接。该forFeature模式是向 Nest 注册所有实体,以便 Nest 可以为它们创建注入令牌。由于它们是单独的进程,因此无法仅使用其中一个。除非MikroOrmModule实现类似 Nest 的东西autoLoadEntities(在 TypeOrmModule 和 SequelizeModule 上),否则没有办法只使用 glob。

于 2020-10-04T18:06:51.543 回答