首页 > 解决方案 > 带有 Typeorm 事务的 Nestjs 存储库模式

问题描述

我一直在使用带有存储库模式的 Nestjs,所以我将存储库注入到服务中,如下所示:

@Injectable()
export class FooService {
  constructor(
    @InjectRepository(Foo)
    private fooRepository: Repository<Foo>,
 ) {}
}

我一直在使用存储库,如下所示:

async createFoo(createFooDto: CreateFooDto) {
  const foo = new Foo();
  foo.Something = createFooDto.Something;
  foo.Anything = createFooDto.Anything; 

  await this.fooRepository.save(foo);
}

现在,如果我想使用事务,文档建议通过在服务上注入 Connection 对象来实现。我的问题是:我可以将上面的构造函数更改为:

@Injectable()
export class FooService {
  constructor(
    @InjectRepository(Foo)
    private fooRepository: Repository<Foo>,
    @InjectConnection()
    private connection: Connection
 ) {}
}

在这种情况下,大多数方法将使用 fooRepository 并且一些需要事务的方法将使用连接对象 (connection.manager.transaction(() => {...}) 或 connection.createQueryRunner() 。 ..)

或者我应该只注入连接并始终从 connection.manager 创建 fooRepository 吗?在我的班级服务上同时拥有一个存储库和一个连接有什么问题?有问题吗?

标签: typescriptnestjstypeorm

解决方案


推荐阅读