使用触发器在表上插入行的 Sequelize 问题

gau*_*rus 2 sql-server triggers node.js sequelize.js

我目前正在一个项目上使用 SQL Server 和 Sequelize。当我尝试在具有与之关联的触发器的表中插入行时,我遇到了问题。

我能够找到有关该问题的信息https://github.com/sequelize/sequelize/issues/3284

我已经下载了 .js 文件,它说它可以与临时表一起使用来克服这个问题:

SequelizeDatabaseError:如果该语句包含不带 INTO 子句的 OUTPUT 子句,则 DML 语句的目标表“tableA”不能有任何启用的触发器。

这个解决方案对我不起作用,当我尝试重新使用插入的对象并且无法访问所有变量时遇到问题。

对于这个问题还有其他解决办法吗?

这是我的代码:

  return Person.create( {   lastName: options.lastName,
                            name: options.name,
                         }, {transaction: t}).then(
                                function (person) {
                                        return Student.create({  id                 :person.id,
                                                                numberRecord              :'PF-'+person.id,

                                                            }, {transaction: t}).then(function (student) {
                                                return Shoots.create({  id                  : person.id,
                                                                            numberRecord              :'PF-'+person.id
                                                    }, {transaction: t}).then(function (record) {



                                                            return StudentContract.create({
                                                                PersonID              :person.id,
                                                                dateStart:'2016021 00:00:00.000',
                                                                endDate:'20161231 00:00:00.000',}
                                                                , {transaction: t}).then(function (contract) {
                                                                return student;

                                                            });

                                                    });
                                        });

                                        });

        }).then(function (result) {
    // Transaction has been committed
    // result is whatever the result of the promise chain returned to the transaction callback is
    console.log(result);
    cb(null, result);
}).catch(function (err) {
    // Transaction has been rolled back
    // err is whatever rejected the promise chain returned to the transaction callback is
    console.error(+err);
    cb(err, "Transaction Failed");
});
Run Code Online (Sandbox Code Playgroud)

当使用上面链接中提供的解决方案时,它说找不到“id”属性。'id' 在 Person 和 Student 中定义为主键。

续集有任何想法或官方解决方案可以解决此问题吗?

谢谢!

kay*_*e99 5

定义表时设置hasTrigger为 true,Sequelize 会为您处理这个问题。例如:

sequelize.define(TABLE_NAME,
{
  id: {
    type: Sequelize.INTEGER,
    allowNull: false,
    primaryKey: true
  },
  description: {
    type: Sequelize.VARCHAR(8000)
  }
},
{
  // options
  timestamps: false,
  hasTrigger: true
});
Run Code Online (Sandbox Code Playgroud)