Я создал простой класс репозитория, который возвращает список проектов:
public class ProjectRepository : IProjectRepository
{
public IQueryable<Project> GetProjects()
{
DbEntities db = new DbEntities();
return db.Projects;
}
}
У меня есть код, который позже работает над этим IQueryable, чтобы выполнить некоторую сортировку / разбиение по страницам:
public ActionResult Index()
{
var projectList = (from p in projectRepository.GetProjects()
orderby p.Name
select p).Take(20);
return View(projectList.ToList());
}
Я изначально обернул свой вызов GetProjects () в оператор использования по привычке - так как обычно хорошей идеей является удаление ваших объектов как можно скорее.Понятно, что это вызвало проблемы, потому что я выполнял какую-то дальнейшую работу с базой данных в своем действии контроллера.
Можно ли просто разрешить удаление объекта, когда он является сборщиком мусора?Есть ли лучший способ сделать это вместо этого?Должен ли я создавать более целенаправленные методы репозитория, такие как:
public IQueryable<Project> GetProjects(int takeThisMany)
{
return (from p in db.Projects
orderby p.Name
select p).Take(takeThisMany);
}
Это хорошая или плохая практика - возвращать объекты IQueryable, которые будут выполнены позже в действии контроллера, без удаления исходного контекста или нет?