繁体   English   中英

TypeORM 无法删除具有 ManyToOne / OneToMany 关系的行

[英]TypeORM cannot delete row with ManyToOne / OneToMany relation

我现在有这个问题,我不知道如何诚实地解决。 我已经在这上面花了几个小时,但找不到解决方案。 我在 Azure 上使用 MS-SQL。

我设置实体的方式如下:

  • 客户和访问:一对多(主要)
  • 访问和客户:ManyToOne(反向)

我正在软删除我的客户,以便无论用户是否希望具体查看客户数据,都可以检索访问信息。 使用关系仍然可以正确解析数据。 这也是不想在这里使用“级联删除”的原因。

但是,由于我想完全删除访问(而不是像客户那样软删除),我面临的问题可能与外键约束有关(不确定,因为我没有从 TypeORM 得到任何错误输出)。 然而,DeleteResult.affected 属性返回 0,这也是我在 DataGrip 查询中看到的,在那里我检查了实际的表数据。

同样重要的是,我能够使用如下简单的 SQL 语句手动删除该行:

DELETE FROM visits
WHERE uuid = 'f0ea300d-...-656a'

我的实体是这样设置的(忽略不重要的信息):

@Entity({ name: 'customers' })
export class Customer {

  @PrimaryColumn()
  uuid: string

  @OneToMany(() => Visit, (visit) => visit.customer)
  visits?: Visit[]
}
@Entity({ name: 'visits' })
export class Visit {

  @PrimaryColumn()
  uuid: string

  @ManyToOne(() => Customer, (customer) => customer.visits)
  customer: Customer
}

我的 GraphQL 解析器:

@Mutation(() => Boolean)
async deleteVisitsByUuid(
  @Arg('uuid') uuid: string,
  @Ctx() { conn }: AppContext,
): Promise<boolean> {
  const repo = conn.getRepository(Customer)
  const result = await repo.delete(uuid)
  const affected = result.affected

  if (affected === undefined || affected == null) {
    return false
  } else {
    return affected > 0
  }
}

问题是 conn.getRepository(Customer)。 我已将其替换为 conn.getRepository(Visit)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM