Чтобы расширить ответ Дэвида:
Если GetAll () возвращает IEnumerable<T>
, IList<T>
или подобное и выглядит примерно так:
public IEnumerable<TEntity> GetAll()
{
return _context.TEntities.ToList();
}
Тогда вы захотитеизмените это на что-то вроде:
public IQueryable<TEntity> GetAll()
{
return _context.TEntities.AsQueryable();
}
В дополнение к этому, если кто-то сталкивается с этим и задается вопросом, зачем его использовать;Шаблон может быть полезен для централизации основных бизнес-правил для приложения, таких как активное состояние Soft-Delete:
public IQueryable<TEntity> GetAll()
{
return _context.TEntities
.Where(x => x.IsActive);
}
// Note: AsQueryable() is not needed when the method returns IQueryable<T>
или для принудительной авторизации, такой как аренда ... (несколько клиентов получают доступ к единой облачной службе, где их данныеожидается, что он будет изолирован.)
public IQueryable<TEntity> GetAll()
{
var tenantId = UserLocatorService.GetCurrentUserTenantId();
return _context.TEntities
.Where(x => x.IsActive && x.TopLevelEntity.TenantId == tenantId);
}
, где UserLocatorService представляет службу зависимостей для оценки текущего вошедшего в систему пользователя и какого арендатора они представляют.