为什么在创建 Loopback 4 默认 REST CRUD 控制器时,默认情况下 loopback 4 不支持多次插入?

Why loopback 4 by default, doesnt support multiple insertion when I create Loopback 4 default REST CRUD controller?

我在 loopback 3 中,我能够一次插入多条记录,但在 loopback 4 中,具有 CRUD 功能的默认 REST 控制器不支持此功能。我可以使用 createAll 而不是 create 并做一些小改动来实现这一点,但我很想知道是否有任何特定原因阻止一次性创建多个记录?

一个主要原因可能是 createAll() 不能保证原子性。由于默认的 Juggler ORM 在 LoopBack 3 和 4 之间共享,此问题适用于 LoopBack 的两个版本。

核心解释

Juggler 连接器至少需要实现 create()delete() 等基本的 CRUD 功能。此外,连接器还可以实现“复合”功能,例如 createAll()deleteAll().

但是,并非所有连接器都实现这些“复合”功能。在这些情况下,Juggler 将悄悄地创建同名的“存根”函数,以包裹基本的 CRUD 函数。例如,createAll() 可能只是多次调用 create() 的循环。这很有用,因为它意味着开发人员可以假设这些功能将存在。但是,这会破坏 ACID 合规性。

交易呢?

事务用于保证基于定义范围的原子操作。然而,并不是所有的连接器都实现了这一点——MongoDB 就是一个例子。与“复合”功能不同,Juggler 不会尝试存根事务。这意味着事务 API 对于未实现它的连接器可能不存在。

为什么不报错?

createAll() 不是原子的或未实现事务 API 时抛出错误意味着开发人员可能需要编写更多集成测试来解决这种提供数据库互操作性的可能性.

TLDR;

  1. createAll() 在没有事务的情况下不能保证原子性。
  2. 事务并未在所有连接器中实现
  3. 它没有在默认的 CRUD 控制器中公开,以鼓励开发人员了解 createAll() 的怪癖,而不是开箱即用并可能搬起石头砸自己的脚。