使用 em.create 创建的实体是否被管理和持久化?

问题描述

https://mikro-orm.io/docs/entity-manager/ 上的文档说

如果实体从数据库获取(通过 em.find()、em.findOne() 或通过其他托管实体)或通过 em.persist() 注册为新实体,则该实体被托管。

但它没有提到 em.create 方法
使用 em.create 创建的实体是否会自动管理,它们是否会由 em.flush 持久化?
如果是这样,是否可以使用 em.flush 创建一个不会被 em.create 持久化的实体?

解决方法

该方法是EntityFactory的快捷方式,它所做的只是创建实例,就像您手动使用实体ctor一样。它不会被持久化,也不会被管理(实体在刷新调用之后成为被管理的, perist 本身只是为了标记它)。

// this is the same
const a = em.create(User,{ name: '...' });
em.persist(a);
await em.flush();

// as this
const a = new User();
a.name = '...';
em.persist(a);
await em.flush();

在这两个示例中,如果没有 em.persist,数据库中将不会存储任何内容。