将typeorm中的bigints保存到SQL Server数据库-参数'0'的验证失败。值必须介于-2147483648和2147483647之间(含)

似乎很乏味(由节点mssql驱动程序使用)在指定为bigint的列上错误地调用了常规大小的int验证。我已经检查了SQL Server数据库并验证了创建的列是bigint,并且我在azure数据工作室中使用大整数(例如,值大于40亿)对此数据库进行的任何查询都可以成功。

我定义了这个typeorm实体:

export class Employee extends BaseEntity {
  @PrimaryColumn('bigint')
  id: number;
...

当我尝试保存该员工时,我收到以下错误消息:

选择“ Employee”。“ id” AS“ Employee_id”,...从“ employee”“ Employee” WHERE“ Employee”。“ id” IN(@ 0)-参数:[4382863930]

错误:RequestError:参数'0'的验证失败。值必须介于-2147483648和2147483647之间(包括两端)

我不确定是否只是缺少某些内容,或者是否需要指定有关实体列的更多信息,或者这是否是typeorm的真正问题

sy20031983 回答:将typeorm中的bigints保存到SQL Server数据库-参数'0'的验证失败。值必须介于-2147483648和2147483647之间(含)

您可以使用 typeorm 提供的转换功能。 所以在这种特殊情况下,你可以拥有这样的代码,

https://typeorm.io/#/decorator-reference/column

transformer: ValueTransformer|ValueTransformer[] - 指定一个值转换器(或值转换器数组),用于在读取或写入数据库时​​(取消)编组此列。在数组的情况下,值转换器将按照从 entityValue 到 databaseValue 的自然顺序应用,从 databaseValue 到 entityValue 以相反的顺序应用。

import { BaseEntity,PrimaryColumn,ValueTransformer } from "typeorm";
export const bigint: ValueTransformer = {
  to: (entityValue: number) => entityValue.toString(),from: (databaseValue: string): number => parseInt(databaseValue,10)
};
export class Employee extends BaseEntity {
  @PrimaryColumn('bigint',{ transformer: [bigint] })
  id: number;
}
本文链接:https://www.f2er.com/2561258.html

大家都在问