You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:24:04