问题描述
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
,数据库中将不会存储任何内容。