无法使用 typeorm (NestJS) 在 SQL Server 中插入 bigint

Posted

技术标签:

【中文标题】无法使用 typeorm (NestJS) 在 SQL Server 中插入 bigint【英文标题】:Cannot insert bigint in SQL Server using typeorm (NestJS) 【发布时间】:2022-01-02 05:59:41 【问题描述】:

我想使用 typeorm 在 SQL Server 中插入记录,其中列的类型为 bigint。我有 id 类型的“猫”实体:bigint

import  Column, Entity  from 'typeorm';

@Entity('Cats')
export class CatsEntity 
  @Column( type: 'bigint', name: 'CatID' )
  public id: string;

  @Column('int',  primary: true, name: 'CatDB' )
  public db: number;

  @Column('varchar',  name: 'Name' )
  public name: string;

  @Column('datetime',  name: 'DDB_LAST_MOD' )
  public ddbLastMod: Date;

还有 dto,我进入控制器:

export class InsertCatsDto 
  public id: string;

  public db: number;

  public name: string;

在控制器中执行保存:

@Post('/cats')
  public async insertEobResponse(@Body() insertCatsDto: InsertCatsDto): Promise<any> 
    const cats = new CatsEntity();

    cats.id = insertCatsDto.id;
    cats.db = insertCatsDto.db;
    cats.name = insertCatsDto.name;
    cats.ddbLastMod = new Date();

    return this.catsRepository.insert(cats);
  

但是当我通过 Postman 发送带有 id 作为字符串的请求时,我收到以下错误:

"error": "Error: Validation failed for parameter '0'. Value must be between -9007199254740991 and 9007199254740991, inclusive. For smaller or bigger numbers, use VarChar type."

我不确定我是否只是缺少某些东西或需要对值进行一些转换,或者这是否是 typeorm 的一个真正问题。

【问题讨论】:

你为什么将id 称为字符串? @AaronBertrand 当我路由实体时,我受到了这个主题 ***.com/questions/59927625/… 的启发,并在 typeorm.io/#/entities/column-types 中有一个关于 bigInt 的注释,这就是为什么它是一个字符串 【参考方案1】:

要使您的代码在 typeorm 中使用 bigInt,您只需将实体中的类型从“bigint”更改为“varchar”:

import  Column, Entity  from 'typeorm';

@Entity('Cats')
export class CatsEntity 
@Column( type: 'varchar', name: 'CatID' )
public id: string;

@Column('int',  primary: true, name: 'CatDB' )
public db: number;

@Column('varchar',  name: 'Name' )
public name: string;

@Column('datetime',  name: 'DDB_LAST_MOD' )
public ddbLastMod: Date;

【讨论】:

以上是关于无法使用 typeorm (NestJS) 在 SQL Server 中插入 bigint的主要内容,如果未能解决你的问题,请参考以下文章

NestJS TypeORM MongoDB 无法使用 find 或 FindOne 搜索存储库

使用 Typeorm 连接到 Nestjs 中的 mssql,但 Nest 无法解析 EmployeeRepository 的依赖关系

NestJS/TypeORM:无法读取未定义的属性“createQueryBuilder”

NestJS typeorm - 无法创建实体

NestJS / TypeOrm / Neo4j :Nest 无法解析 NEO4J_DRIVER 的依赖关系

Nx Monorepo NestJS TypeORM SQLite:无法连接到数据库