我尝试将 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 相同的上下文,它有效!
我终于找到问题所在了。当我收到连接信息时,我没有被告知银行,所以我尝试在master上,因为我的用户没有创建外键的权限。