Переход от mySQL к MS SQL - PullRequest
0 голосов
/ 19 июня 2020

Мы переходим с mySQL на MS SQL db и используем Sequelize в NodeJS в качестве API.

Проблемы начинаются при использовании метода .findOrCreate.

При вызове конечной точки я ожидаю, что будет создана запись, которую я передаю в теле запроса, поскольку ее нет в базе данных. Поле ID в базе данных - pk и identity (0,1).

Sequelize пытается вставить в это поле, как я могу предотвратить это?

Это код в маршруте:

model.table1
    .findOrCreate({
      where: {
        id: req.params.id
      },
      defaults: {
        field1: req.body.field1,
        field2: req.body.field2,
        field3: req.body.field3
      }
    })
    .spread((rowFound, created) => {
      if (created) {
        rowFound.get({ plain: true });
      } else {
        rowFound.update({
          field1: req.body.field1,
        field2: req.body.field2,
        field3: req.body.field3
        });
      }
    })
    .then(result => {
      res.json(result);
    })
    .catch(error => {
      console.log('error', error);
      res.status(500).send('Something went wrong');
    });

Это модель:

module.exports = sequelize => {
  const table1 = sequelize.define(
    'table1',
    {
      field1: Sequelize.STRING(10),
      field2: Sequelize.STRING(255),
      field3: Sequelize.STRING(300),
      id: { type: Sequelize.INTEGER, primaryKey: true },
    },
    {
      schema: 'dbo',
      tableName: 'table1',
      hasTrigger: true
    }
  );

  return table1;
};

1 Ответ

0 голосов
/ 20 июня 2020

Попробуйте изменить вашу модель на следующее:

module.exports = sequelize => {
  const table1 = sequelize.define(
    'table1',
    {
      field1: Sequelize.STRING(10),
      field2: Sequelize.STRING(255),
      field3: Sequelize.STRING(300),
      id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true },
    },
    {
      schema: 'dbo',
      tableName: 'table1',
      hasTrigger: true
    }
  );

  return table1;
};
...