sequelize 批量插入在播种时失败

sequelize Bulk insert fails when seeding

我在节点项目中使用 sequelize 作为 ORM 并尝试插入一些种子数据,但是失败了。

我正在尝试找到一种方法,以便由 sequelize 生成的插入语句忽略 Id 或接受我正在设置的 Id,并且在插入语句之前将 SET IDENTITY_INSERT 设置为 ON,然后在插入集合之后关闭。

我知道设置 needIdentityInsertWrapper:true 会执行后者,但我的语法似乎有问题。

模型如下

module.exports = (sequelize, DataTypes) => {
    const Client = sequelize.define("Client", {
        Id: {
            primaryKey: true,
            type: "INTEGER IDENTITY(1,1)",
        },

        Name:{
            type: "VARCHAR(250)",
            allowNull: false,
            validate: {
                notEmpty: true
            }
        },

        AddressLine1:{
            type: "VARCHAR(500)",
            allowNull: false,
            validate: {
                notEmpty: true
            }
        },

        AddressLine2:{
            type: "VARCHAR(500)",
            allowNull: true,
        },

        AddressLine3:{
            type: "VARCHAR(500)",
            allowNull: true,
        },

        Postcode:{
            type: "VARCHAR(10)",
            allowNull: false,
            validate: {
                notEmpty: true
            }
        },

        City:{
            type: "VARCHAR(100)",
            allowNull: true,
        },

        
        County:{
            type: "VARCHAR(50)",
            allowNull: true,
        },


        Country:{
            type: "VARCHAR(100)",
            allowNull: true,
        },

        ContactNumber : {
            type: "VARCHAR(20)",
            allowNull: true,
        },


        Email : {
            type: "VARCHAR(500)",
            allowNull: true,
        },

        CreatedAt :{
            type:"datetimeoffset(7) DEFAULT GETDATE()",
            allowNull: false
        },

        UpdatedAt :{
            type:"datetimeoffset(7)",
            allowNull: true
        }

    },
    {freezeTableName: true,  createdAt: false,updatedAt: false}
    );

    Client.associate=models=>{
        Client.hasMany(models.Invoice,{foreignKey:"ClientId"})
    }

   return Client;
}

这里是批量插入代码

var db = require('../models')

module.exports = async function () {
    return await db.Client.bulkCreate(
        [{
           // Id:1,
            name:"Company",
            AddressLine1:"Add 1",
            Postcode:"Postcode",
            City:"UK"
        }],{},
        {
            autoincrement :true,
            needIdentityInsertWrapper:true
        }
    )
}

为了解决这个问题,我更改了以下代码

module.exports = (sequelize, DataTypes) => {
const Client = sequelize.define("Client", {
    Id: {
        primaryKey: true,
        type: "INTEGER",
        autoIncrement:true
    },

    Name:{
        type: "VARCHAR(250)",
        allowNull: false,
        validate: {
            notEmpty: true
        }
    },

    AddressLine1:{
        type: "VARCHAR(500)",
        allowNull: false,
        validate: {
            notEmpty: true
        }
    },

    AddressLine2:{
        type: "VARCHAR(500)",
        allowNull: true,
    },

    AddressLine3:{
        type: "VARCHAR(500)",
        allowNull: true,
    },

    Postcode:{
        type: "VARCHAR(10)",
        allowNull: false,
        validate: {
            notEmpty: true
        }
    },

    City:{
        type: "VARCHAR(100)",
        allowNull: true,
    },

    
    County:{
        type: "VARCHAR(50)",
        allowNull: true,
    },


    Country:{
        type: "VARCHAR(100)",
        allowNull: true,
    },

    ContactNumber : {
        type: "VARCHAR(20)",
        allowNull: true,
    },


    Email : {
        type: "VARCHAR(500)",
        allowNull: true,
    },

    CreatedAt :{
        type:"datetimeoffset(7) DEFAULT GETDATE()",
        allowNull: false
    },

    UpdatedAt :{
        type:"datetimeoffset(7)",
        allowNull: true
    }

},
{freezeTableName: true,  createdAt: false,updatedAt: false}
);

Client.associate=models=>{
    Client.hasMany(models.Invoice,{foreignKey:"ClientId"})
}

return Client;
}