Ecto:在事务期间检索所有已执行的变更集

时间:2016-08-25 09:42:05

标签: elixir ecto

对于给定的Ecto事务,如何改进它以自动添加SQL插入以记录已执行的更改集中的所有更改值?以下是不成功的尝试:

使用Ecto.Multi:

  • Ecto.Multi.to_list不是解决方案,因为multi可以包含Ecto.Multi.run操作(如果操作之间存在依赖关系,则需要执行这些操作:例如,在创建第一个用户的帐户时,我们需要在用户变更集中注入帐户ID。

  • 添加最终负责自动注入审核事件的Ecto.Multi.run也是不可能的,因为changes_so_far参数是先前操作的结果,而不是变更集。

将Repo.transaction()与匿名函数一起使用不会返回任何变更集。

1 个答案:

答案 0 :(得分:0)

来自https://groups.google.com/forum/#!topic/elixir-ecto/5M6VA8fg364

目前还没有这样的功能,而且我不赞成添加它 - 这可以在今天没有对API进行任何更改的情况下实现。 如果我要创建一个这样做的系统,我很可能将Ecto.Multi函数包装在我自己的函数中,这将添加额外的跟踪 - 例如:

Private Sub Wheeeeee()
    Dim foo(3) As Double
    foo(0) = 1.1
    foo(1) = 2.2
    foo(2) = 3.3
    foo(3) = 4.4

    Dim pArray As Long
    pArray = GetBaseAddress(foo)
    Debug.Print DerefDouble(pArray) 'Element 0
    Debug.Print DerefDouble(pArray + 16) 'Element 2
End Sub

这将允许您保留Ecto.Multi的漂亮API,同时允许您轻松地执行其他操作。