То, что вы пытаетесь сделать, называется Ленивая загрузка
Самый простой способ сделать это - сделать что-то подобное на вашем сервисном уровне:
public class EmployeeManager : IEmployeeManager
{
private readonly IEmployeeRepository _employeeRepository;
private IEnumerable<Employee> _employees;
public EmployeeManager(IEmployeeRepository employeeRepository)
{
_employeeRepository = employeeRepository;
}
public IEnumerable<Employee> GetEmployees()
{
return
_employees ?? (_employees = _employeeRepository.GetAll());
}
}
Обратите внимание, что коллекция _employees
заполняется только при первом вызове метода GetEmployees()
. Поэтому, предполагая, что ваш код доступа к данным разделен на другом уровне, вы можете просто поместить эту логику туда, и данные будут заполняться только тогда, когда это необходимо.
Другим способом решения этой проблемы было бы внедрение Paging, чтобы вы получали только те данные, которые вам нужны, в виде кусков, а не загружали целые таблицы в память, вот дополнительная информация об этом:
http://www.codeproject.com/KB/database/PagingResults.aspx