NestJS 中 Prisma Interactive Transaction 的回滚在抛出错误时不起作用

Rollback of Prisma Interactive Transaction in NestJS not working when throwing an error

我正在使用 prisma ORM and NestJS,我得到了以下示例代码:

async createMerchant(data: Prisma.MerchantCreateInput): Promise<Merchant> {
  return await this.prisma.$transaction(async (): Promise<Merchant> => {
    await this.prisma.merchant.create({
      data,
    });
    throw new Error(`Some error`);
  });
}

我希望事务回滚,因为我抛出了一个错误,但事实并非如此,它创建了一个新的数据库条目。

这里是the example of the official documentation

这是否与NestJS的依赖注入有关,注入的prisma服务没有正确识别错误?还是我做错了什么?

如示例所示,您需要使用作为参数传递给回调函数的 prisma 实例,如下所示:

async createMerchant(data: Prisma.MerchantCreateInput): Promise<Merchant> {
  return await this.prisma.$transaction(async (prisma): Promise<Merchant> => {
    // Not this.prisma, but prisma from argument
    await prisma.merchant.create({
      data,
    });
    throw new Error(`Some error`);
  });
}