c# – Deleting a child of aggregate root in DDD

Consider this code, that uses EF Core wrapped inside the unitOfWork to manage the database:

public class UnitOfWork
    private readonly Context DbContext;

    public async Task SaveChangesAsync(CancellationToken cancellationToken)
            => await DbContext.SaveChangesAsync(cancellationToken);

    public UnitOfWork(Context context)
        this.DbContext = context ?? throw new ArgumentNullException(context.GetType().Name);

    public async Task<AggregateRoot> GetAggregateRootByIdAsync(int id, CancellationToken cancellationToken)
        => await DbContext.AggregateRoots.FirstOrDefaultAsync(i => i.Id == id, cancellationToken);
public class Controller
    private UnitOfWork unitOfWork;
    public Controller(UnitOfWork unitOfWork)
        this.unitOfWork = unitOfWork;
    public async Task<IActionResult> Delete((FromRoute) int aggregateRootId, (FromRoute)int childId, CancellationToken cancellationToken)
        var aggregateRoot = await unitOfWork.GetAggregateRootByIdAsync(aggregateRootId, cancellationToken);
        if(aggregateRoot is null)
            return BadRequest("Not Found");

        if (!aggregateRoot.RemoveChildById(childId))
            return BadRequest("Not found");

        await unitOfWork.SaveChangesAsync(cancellationToken);
        return Ok();

Here, AggregateRoot contains the method to delete its child, due to the principle of

All changes to the data must be done through the aggregate roots

so as you can see, there will be a redundant select of the aggregate root along with all the children that seems to be useless.

What do you think about this code and the mentioned problem above? Is there any way to improve it?