Используют ли модели 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.

Другие вопросы по тегам