我可以在CRUD服务GetAll中使用EF Core 2.0'AsNoTracking'吗?

时间:2018-03-28 03:55:19

标签: c# entity-framework asp.net-core entity-framework-core aspnetboilerplate

我有一个实现的应用服务:

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

我想使用AsNoTracking

在下面的示例中,有没有办法使用AsNoTracking

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

1 个答案:

答案 0 :(得分:2)

是。但是,.AsNoTracking()仅适用于IQueryable,因此您无法调用base方法。

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()
    );
}