我可以在 CRUD 服务 GetAll 中使用 EF Core 2.0 'AsNoTracking' 吗?
Can I use EF Core 2.0 'AsNoTracking' in CRUD service GetAll?
我有一个应用服务实现了:
public interface IPracticeAppService : IAsyncCrudAppService<PracticeDto, int, PagedAndSortedResultRequestDto,CreatePracticeDto, PracticeDto>
我想使用 AsNoTracking
。
在下面的例子中,有没有办法使用AsNoTracking
?
public override Task<PagedResultDto<PracticeDto>> GetAll(PagedAndSortedResultRequestDto input)
{
return base.GetAll(input);
}
是的。但是,.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()
);
}
我有一个应用服务实现了:
public interface IPracticeAppService : IAsyncCrudAppService<PracticeDto, int, PagedAndSortedResultRequestDto,CreatePracticeDto, PracticeDto>
我想使用 AsNoTracking
。
在下面的例子中,有没有办法使用AsNoTracking
?
public override Task<PagedResultDto<PracticeDto>> GetAll(PagedAndSortedResultRequestDto input)
{
return base.GetAll(input);
}
是的。但是,.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()
);
}