Ecto:在一个事务中增加变更集

Ecto: multiply changesets in one transaction

我有以下代码:

MyModel.changeset(data)
|> Repo.insert()

我想在单个事务中将同一行插入 3 次 MyModel。 Ecto 是否有类似的东西:

repeat_times(3, MyModel.changeset(data))
|> Repo.insert()

?

简短的回答是否定的,Ecto 3.x 不会给你开箱即用的东西......

如果您正在寻找 insert_all 类型的操作,您是否检查过 Repo.insert_all?这是我能想到的最接近的功能,可能会为您提供所需的功能。您必须编写自己的自定义函数或其他内容来手动构建重复“MyModel”记录的列表。如果您想合并变更集,您将不得不再次创建自己的函数。

你见过https://hexdocs.pm/ecto/Ecto.Multi.html吗?它实际上操作多个功能并在单个数据库事务中执行它们。