这里的问题是,在使用persistAndFlush
方法时,您通过等待承诺立即将实体持久保存到数据库中。相反,您可以调用em.persistLater(article)
以将其标记为持久。然后调用em.flush()
,这将在单个事务中提交对数据库的所有更改。
app.put('/articles', async (req, res) => {
req.body.articles.forEach(dto => {
const article = Object.assign(new Article(), dto)
req.em.persistLater(article)
})
await req.em.flush() // save everything to database inside single transaction
res.send({ ok: true })
})
您可以通过将所有实体准备到一个数组中来使其更简单persistAndFlush
,而是:
app.put('/articles', async (req, res) => {
const articles = req.body.articles.map(dto => Object.assign(new Article(), dto))
await req.em.persistAndFlush(articles) // save everything to database inside single transaction
res.send({ ok: true })
})
Object.assign()
此外,您可以在实体上使用方法而不是 using ,IEntity.assign()
它还将负责从普通标识符创建引用:
const article = new Article().assign(dto)
更多关于IEntity.assign()
可以在文档中找到:
https://b4nan.github.io/mikro-orm/entity-helper/
您还可以使用EntityManager.create()
帮助器,它将为您构造实体 - 这样做的好处是它会自动处理构造函数参数,将它们传递给构造函数而不是直接分配它们。
const article = req.em.create(Article, dto)