如何用Sequelize从现有SQL Server库自动生成NestJS类式模型实体
NestJS + Sequelize 对接SQL Server自动生成类式实体模型方案
你对sequelize-auto的认知存在偏差,该工具本身不绑定Express框架,完全支持生成符合TypeScript规范的类式实体模型,可直接在NestJS项目中使用,具体操作步骤如下:
1. 安装所需依赖
- 核心生成工具:
sequelize-auto - SQL Server驱动:
tedious(Node生态对接SQL Server的官方适配驱动) - 类型依赖:
@types/sequelize(如果项目已安装可跳过)
安装命令:
npm install sequelize-auto tedious @types/sequelize -D
2. 编写生成配置脚本
推荐用脚本方式配置生成规则,方便后续复用,在项目根目录新建generate-models.ts文件,内容示例如下:
import { SequelizeAuto } from 'sequelize-auto'; const auto = new SequelizeAuto( '你的数据库名', '数据库账号', '数据库密码', { host: '数据库地址', port: 1433, // SQL Server默认端口 dialect: 'mssql', dialectOptions: { options: { trustServerCertificate: true, // 本地开发时如果是自签证书可以开启 } }, // 生成规则配置 output: './src/entities', // 实体生成后存放的目录 language: 'ts', // 生成TypeScript代码 caseModel: 'pascal', // 实体类名使用大驼峰,符合NestJS命名规范 caseProp: 'camel', // 类属性使用小驼峰,自动映射数据库蛇形字段 caseFile: 'kebab', // 文件名使用烤串式,符合NestJS文件命名规则 useDefine: true, // 生成ES6类格式的实体,不是旧版函数式 skipTables: [], // 不需要生成的表可以填在这里 } ); auto.run().then(data => { console.log('实体模型生成完成,共生成', Object.keys(data.tables).length, '个实体'); });
3. 执行生成脚本
运行以下命令即可自动生成所有表对应的类式实体:
npx ts-node generate-models.ts
4. NestJS中使用生成的实体
生成的实体完全符合Sequelize TypeScript规范,和你手动编写的实体用法完全一致,直接在对应模块中引入即可:
import { Module } from '@nestjs/common'; import { SequelizeModule } from '@nestjs/sequelize'; import { User } from './entities/user.entity'; // 引入生成的实体 @Module({ imports: [SequelizeModule.forFeature([User])], // 其余配置 }) export class UserModule {}
补充说明
- 生成的实体不要手动修改,后续表结构变更后重新执行生成脚本即可,若需要扩展实体逻辑可以用继承的方式实现
- SQL Server特有的字段类型(如datetimeoffset、nvarchar(max)等)会自动映射到Sequelize对应的类型,无需手动调整
- 可以通过配置sequelize-auto的
additional参数,给所有生成的实体统一添加自定义装饰器、公共属性等内容
内容的提问来源于stack exchange,提问作者Mark musisha
相关产品推荐
相关产品推荐

