user1131926
user1131926

Reputation: 1341

sequelize Bulk insert fails when seeding

I am using sequelize as ORM in a node project and trying to insert some seed data, however, that fails.

I am trying to find a way so the insert statement generated by sequelize either ignores the Id or Accepts the Id I am setting and before the insert statement sets the SET IDENTITY_INSERT TO ON and then after inserting sets is to off.

I know setting the needIdentityInsertWrapper:true does the latter but there is something wrong in my syntax it seems.

following is the model

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;
}

and here is the bulk insert code

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
        }
    )
}

Upvotes: 0

Views: 460

Answers (1)

user1131926
user1131926

Reputation: 1341

To fix the issue I made the following code change

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;
}

Upvotes: 0

Related Questions