“错误:无法创建约束或索引。请参阅以前的错误”与 Nest js 和 AzureSql

问题描述 投票:0回答:1

我尝试将 TypeORM 与 NestJS 结合使用在 AzureSQL 中进行迁移,但在 alter table 中查询创建 FK 失败。以下是实体和错误:

query failed: ALTER TABLE "procedure" ADD CONSTRAINT "FK_f4621b8148f6622456a554adcc6" FOREIGN KEY ("patientId") REFERENCES "patient"("id") ON DELETE NO ACTION 
ON UPDATE NO ACTION
error: QueryFailedError: Error: Could not create constraint or index. See previous errors.
[Nest] 15636  - 22/03/2024, 10:56:12   ERROR [TypeOrmModule] Unable to connect to the database. Retrying (8)...
QueryFailedError: Error: Could not create constraint or index. See previous errors.
    at C:\Users\david\Documents\clinica-back\src\driver\sqlserver\SqlServerQueryRunner.ts:282:30
    at C:\Users\david\Documents\clinica-back\node_modules\mssql\lib\base\request.js:440:25
    at Request.userCallback (C:\Users\david\Documents\clinica-back\node_modules\mssql\lib\tedious\request.js:492:15)
    at Request.callback (C:\Users\david\Documents\clinica-back\node_modules\tedious\src\request.ts:379:14)
    at Parser.onEndOfMessage (C:\Users\david\Documents\clinica-back\node_modules\tedious\src\connection.ts:3713:22)
    at Object.onceWrapper (node:events:628:28)
    at Parser.emit (node:events:514:28)
    at Readable.<anonymous> (C:\Users\david\Documents\clinica-back\node_modules\tedious\src\token\token-stream-parser.ts:30:12)
    at Readable.emit (node:events:514:28)
    at endReadableNT (node:internal/streams/readable:1359:12)

患者实体

@Entity()
export class Patient{
    @PrimaryGeneratedColumn()
    id: number

    @Column({type: 'varchar', length: 11, nullable: false, unique: true})
    cpf: string;
    
    @Column({type: 'varchar', length: 200, nullable: false})
    name: string;

    @OneToMany(()=> Procedure, procedure=>procedure.patient, { 
        nullable: false, 
        cascade: true, 
        onDelete: 'CASCADE'} )
    procedures: Procedure[]
}

过程实体

@Entity()
export class Procedure{

    @PrimaryGeneratedColumn()
    id: number
    
    @Column({type: 'varchar', nullable: false})
    name: string;
    
    @ManyToOne(()=>Patient, (patient)=> patient.procedures, 
    { nullable: false, onDelete: 'NO ACTION', onUpdate: 'NO ACTION'})
    patient: Patient;
}

一个(患者)与多个(程序)关系;

OBS:我在本地计算机中尝试了与 MSSQL 相同的上下文,它有效!

azure nestjs azure-sql-database typeorm nestjs-typeorm
1个回答
0
投票

我终于找到问题所在了。当我收到连接信息时,我没有被告知银行,所以我尝试在master上,因为我的用户没有创建外键的权限。

© www.soinside.com 2019 - 2024. All rights reserved.