Search code examples
c#entity-frameworkasp.net-coreentity-framework-coreaspnetboilerplate

Can I use EF Core 2.0 'AsNoTracking' in CRUD service GetAll?


I have an Application Service that implements:

public interface IPracticeAppService : IAsyncCrudAppService<PracticeDto, int, PagedAndSortedResultRequestDto,CreatePracticeDto, PracticeDto>

I would like to use AsNoTracking.

In the example below, is there a way of using AsNoTracking?

public override Task<PagedResultDto<PracticeDto>> GetAll(PagedAndSortedResultRequestDto input)
{    
    return base.GetAll(input);
}

Solution

  • Yes. However, .AsNoTracking() only applies to IQueryable so you can't call the base method.

    public override async Task<PagedResultDto<PracticeDto>> GetAll(PagedAndSortedResultRequestDto input)
    {
        CheckGetAllPermission();
    
        var query = CreateFilteredQuery(input).AsNoTracking(); // Here!
    
        var totalCount = await AsyncQueryableExecuter.CountAsync(query);
    
        query = ApplySorting(query, input);
        query = ApplyPaging(query, input);
    
        var entities = await AsyncQueryableExecuter.ToListAsync(query);
    
        return new PagedResultDto<PracticeDto>(
            totalCount,
            entities.Select(MapToEntityDto).ToList()
        );
    }