Ecto 数据操作与事务处理:从基础到高级应用
1. 数据来源与处理方式
在处理数据时,首先要考虑数据的来源。不同来源的数据,处理方式也有所不同。
- 外部数据源 :如果数据来自外部源,建议使用 cast_assoc 。它会利用你提供的变更集(changesets)来转换和验证数据,让你对数据的导入和错误检查有更多的控制权。
- 内部生成的数据 :若数据是在应用代码中由你自己生成的,可以使用 put_assoc 直接添加数据结构。当插入内部生成的新记录时,甚至可以完全绕过变更集,使用 Repo.insert 一次性添加父记录和子记录。
此外,当分别管理父记录和子记录时,即使处理外部数据, put_assoc 也是不错的选择。例如,可以先使用变更集单独创建、更新或删除子记录,然后在另一个变更集中使用 put_assoc 更新父记录上的集合,这在处理多对多关联时非常有效。
2. 事务的必要性
在数据库操作中,有时需要将多个操作作为一个整体来处理,确保它们要么全部成功,要么全部失败。以银行账户间的资金转移为例,如果从 Bob 的账户转移 10 美元到 Alice 的账户,需要执行两个更新操作:减少 Bob 的余额 10 美元,增加 Alice 的余额 10 美元。若 Bob 的余额更新成功,但 Alice 的余额更新失败,账户就会失去同步,10 美元也会丢失。
为了保证数据库的完整性,就需要使用事务。
超级会员免费看
订阅专栏 解锁全文
39

被折叠的 条评论
为什么被折叠?



