Используют ли модели Nerd Dinner лучшие практики для утилизации предметов?
Я смотрел на код Nerd Dinner и одну вещь, которую они делают в своих моделях, - это создание экземпляра DataContext следующим образом:
public class DinnerRepository {
private NerdDinnerDataContext db = new NerdDinnerDataContext();
public IQueryable<Dinner> FindUpcomingDinners() {
return from dinner in db.Dinners
where dinner.EventDate > DateTime.Now
orderby dinner.EventDate
select dinner;
}
// more methods below
}
Они используются в контроллерах следующим образом:
public class DinnersController : Controller {
DinnerRepository dinnerRepository = new DinnerRepository();
public ActionResult Index() {
var dinners = dinnerRepository.FindUpcomingDinners().ToList();
return View("Index", dinners);
}
}
Но не похоже, что NerdDinnerDataContext когда-либо удаляется. Это проблема, о которой я должен беспокоиться? Или этот шаблон в порядке?
Примечание: не последний код Ужина Nerd, я знаю
2 ответа
Оказывается, что удаление объекта DataContext, как правило, не то, что вы хотите сделать в типичном приложении.
см. http://mostlytech.blogspot.com/2008/01/linq-datacontextdispose.html (конечно же, Джоном Скитом), чтобы узнать немного подробнее.
В этом случае это лучшая практика. Репозиторий возвращает объект IQueryable... что означает, что обработка запроса будет отложена до тех пор, пока не потребуется результат.
Если вы избавляетесь от контекста в репозитории, когда вызывающий код пытается извлечь результаты из объекта IQueryable, не останется никакого DataContext.