是否可以使用@InjectRepository而不在子模块中注册实体?

问题描述

让我们拥有一个根模块,例如:

@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()工作而无需子模块和手动引用?由于Im已经找到具有斑点的实体,因此再次手动引用它们似乎违反了斑点模式的目的。

解决方法

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