Saving a sales order - too many repositories?
I find it interesting that you want to decouple layers, but that the method you have here is tightly coupled with UnitOfWork&lt;LogContext&gt; (and thus with LogContext as well), OrderLineRepository and OrderDetailRepository.
To answer the question directly, yes, it's way overdone.
I'd put a method like SalesOrder FindSalesOrder(int id) in a service layer:
public class SalesOrderService
{
    private readonly IUnitOfWork _uow;

    public SalesOrderService(IUnitOfWork uow)
    {
        _uow = uow;
    }

    public SalesOrder FindSalesOrder(int id)
    {
        return _uow.Set&lt;SalesOrder&gt;() // get repository
                   .Where(order =&gt; order.Id == id) // filter by id
                   .Include(order =&gt; order.OrderLines) // eager-load details
                   .ToList(); // materialize
    }
}

What's IUnitOfWork, you'll ask? Just an abstraction that looks something like this:
internal interface IUnitOfWork
{
    DbSet&lt;TEntity&gt; Set&lt;TEntity&gt;();
    void Commit();
}

The EF context itself implements it:
public class MyDbContext : DbContext, IUnitOfWork
{
    public IDbSet&lt;SalesOrder&gt; Orders { get; set; }
    
    public void Commit()
    {
        SaveChanges();
    }
}

Entity Framework's DbContext is a unit-of-work implementation, and IDbSet&lt;T&gt; is a repository.
Constructor-injecting an IUnitOfWork in your service class effectively decouples your service class from EF, at least good enough for unit testing (you can mock what Set&lt;T&gt;() returns)... &quot;swapping the ORM&quot; will require lots of work anyway, and is highly hypothetical - the cost vs benefits ratio doesn't add up in favor of abstracting EF with repositories.

Your Code
There are a number of itchy spots with the code you've provided:

Casing is annoyingly inconsistent for local variables. Should be camelCase, always: var LineDetails becomes var lineDetails, for example.
using blocks should be stacked whenever possible, to reduce unnecessary nesting:


using (var uow = new UnitOfWork&lt;LogContext&gt;())
{
    using (var repository = new SalesOrderRepository(uow))
    {
        var SalesOrder = repository.Find(s =&gt; s.Id == id, s =&gt; s.Site, s =&gt; s.User);
        if (SalesOrder != null)
        {


Becomes:
using (var uow = new UnitOfWork&lt;LogContext&gt;())
using (var repository = new SalesOrderRepository(uow))
{
    var SalesOrder = repository.Find(s =&gt; s.Id == id, s =&gt; s.Site, s =&gt; s.User);
    if (SalesOrder != null)
    {