result.Attributes = await dbContext.DocumentAttributes
.AsNoTracking()
.Where(a => a.DocumentRef == doc.Id && a.Enabled)
.OrderBy(a => a.AttributeKey)
.ToDictionaryAsync(a => a.AttributeKey, a => a.Value);
if (children)
result.Children = await Children(doc.Id);
else
result.Children = [];
var refs = await dbContext.References
.AsNoTracking()
.GroupJoin(dbContext.Documents, r => r.ReferenceTo, d => d.Id, (r, d) => new { r, d })
.Where(rd => rd.r.DocumentRef == doc.Id)
.SelectMany(
rd => rd.d.DefaultIfEmpty(),
(r, d) => new Reference(r.r.ReferenceTo, d.Path, r.r.MediaLink, mediaHost))
.ToDictionaryAsync(r => r.Pattern, r => r.Replacement);
result.Summary = ReplaceRefs(result.Summary, refs);
result.CoverPicture = ReplaceRefs(result.CoverPicture, refs);