在陈述交易时,如何实现某些陈述是在交易之外。
请参阅以下示例,第一个create
语句没有获得transaction
选项,因此它应该不在事务中,并且在回滚时它应该在数据库中。但是,两者都在交易中并且都回滚。任何意见?
describe.only('sequelzie transaction test', () => {
const sequelize = new Sequelize('test', null, null, {
dialect: 'sqlite',
})
const UserModel = sequelize.define('user', {
name: {
type: Sequelize.STRING,
primaryKey: true,
},
})
beforeEach (async () => {
await sequelize.sync({force: true})
})
it('partial rollback transaction should work', async () => {
const transaction = await sequelize.transaction()
try {
await UserModel.create({name: 'ron'} )
await UserModel.create({name: 'ron', {transaction}})
await transaction.commit()
}
catch (e) {
await transaction.rollback()
}
const users = await UserModel.findAll()
expect(users).to.have.length(1) // failed here, it was 0, both are rolled back
})
})
答案 0 :(得分:0)
我在您的代码中发现的一个问题是在create function
中错误地传递了事务await UserModel.create({name: 'ron'}, {transaction})
交易是期权对象的一部分。还可以尝试启用调试选项以检查正在执行的查询。你将能够辨别出这个问题。