node.js - Bigint-ების შენახვა typeorm-ში SQL Server მონაცემთა ბაზაში - პარამეტრი '0' ვერ იქნა დამოწმებული. მნიშვნელობა უნდა იყოს -2147483648 და 2147483647 შორის, შედებული
გვანიშნება, რომ tedious (რომელსაც იყენებს node mssql ტრაივერი) არასწორად ავლენს რეგულარული ზომის int-ით გადამოწმებას იმ სვეტისათვის, რომელიც განსაზღვრულია როგორც bigint. მე დავრწმუნდი SQL Server მონაცემთა ბაზაში და ვნახე, რომ შექმნილი სვეტი არის bigint, და ყველა შეკითხვა, რომელსაც ვაკეთებ azure data studio-ში ამ მონაცემთა ბაზასთან დიდი ints-ის გამოყენებით (მაგალითად, მნიშვნელობები 4 მილიარდზე მეტია), წარმატებით სრულდება.
მე მაქვს ასეთი typeorm სუბიექტი განსაზღვრული:
export class Employee extends BaseEntity {
@PrimaryColumn('bigint')
id: number;
...
და როდესაც მე ვცდილობ ის თანამშრომელი შევქმნა, მე მივიღე ეს შეცდომის შეტყობინება:
SELECT "Employee"."id" AS "Employee_id", ... FROM "employee" "Employee" WHERE "Employee"."id" IN (@0) -- PARAMETERS: [4382863930]
შეცდომა: RequestError: ვერ მოხერხდა პარამეტრის '0' გადამოწმება. მნიშვნელობა უნდა იყოს -2147483648-სა და 2147483647-ს შორის, მოიცავს ორივეს
არ ვარ დარწმუნებული, ეს უბრალოდ რაიმეს გამოტოვებაა თუ უნდა დავანიშნო მეტი ინფორმაცია სვეტის შესახებ ან თუ ეს რეალური პრობლემა არის typeorm-თან
პასუხი #1
თქვენ შეგიძლიათ გამოიყენოთ transform ფუნქცია, რომელიც typeorm-ში არის მიწოდებული. ასე რომ, ამ კონკრეტულ შემთხვევაში, თქვენი კოდი შეიძლება იყოს ასეთი,
https://typeorm.io/#/decorator-reference/column
ტრანსფორმერი: 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;
}
