文档强调我应该EntityManager
为每个请求使用一个新的,甚至还有一个用于自动生成它的中间件,或者我可以使用em.fork()
. 到目前为止,一切都很好。
这EntityRepository
是使代码可读的好方法。我在文档中找不到任何关于它们如何与EntityManager
实例相关的信息。该express-ts-example-app
示例使用存储库和RequestContext
中间件的单个实例。这表明EntityManager
至少在RequestContext
. 真的是这样吗?
另外,如果我手动分叉 EM,它还能找到正确的吗?考虑以下示例:
(async () => {
DI.orm = await MikroORM.init();
DI.em = DI.orm.em;
DI.companyRepository = DI.orm.em.getRepository(Company);
DI.invoiceRepository = DI.orm.em.getRepository(Invoice);
...
fetchInvoices(em.fork());
}
async function fetchInvoices(em) {
for (const company of await DI.companyRepository.findAll()) {
fetchInvoicesOfACompany(company, em.fork())
}
}
async function fetchInvoicesOfACompany(company, em) {
let done = false;
while (!done) {
const invoice = await getNextInvoice(company.taxnumber, company.lastInvoice);
if ( invoice ) {
DI.invoiceRepository.persist(invoice);
company.lastInvoice = invoice.id;
em.flush();
} else {
done = true;
}
}
}
是否使用DI.invoiceRepository.persist()
了fetchInvoicesOfACompany()
正确的 EM 实例?如果没有,我该怎么办?
另外,如果我没记错的话,em.flush()
infetchInvoicesOfACompany()
不会更新公司,因为它属于另一个 EM - 我应该如何处理这种情况?