За последние несколько дней я гуглял тонну шаблонов хранилища с Linq. Там много информации, но она часто противоречива, и я все еще ищу точный источник.
Одна из вещей, в которых я до сих пор не уверен, заключается в том, должен ли репозиторий создавать экземпляр своего собственного DataContext и иметь метод SubmitChanges, или же DataContext должен быть внедрен, а передача обработана извне. Я видел оба дизайна, но никаких реальных комментариев по поводу рассуждений не получил.
Во всяком случае, следующий шаблон довольно распространен
class Repository<T>
{
DataContext db = new LinqDataContext();
public IEnumerable<T> GetAll() { ... }
public T GetById() { ... }
... etc
public void SubmitChanges() { ... }
}
Итак, мой главный вопрос в вышеописанной реализации, почему хранилищу не нужно реализовывать IDisposable? Я видел буквально сотни примеров, как указано выше, и ни один из них, похоже, не удосужился утилизировать DataContext. Разве это не утечка памяти?