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`);
});
}
我正在使用 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`);
});
}