WPF/ASP.NET, Entity Framework ,DbContext и нужно ли вызывать Dispose?

Вот и меня настиг этот довольно спорный вопрос. Когда я начал изучать этот вопрос то мне везде попадались примеры с использованием using. Например как здесь Enitity Framework и Using. Я являюсь програмистом wpf приложений и когда начал изучать Entity у меня был опыт с его предшественником с DataSet и TableAdapter. Тут было достаточно просто так как DataSet/DataTable может жить отдельно от TableAdapter и все изменения фиксируются в нем. То есть я могу привязать DataTable напрямую к любому DataGrid и вызывать TableAdapter для обновлений в любое время тут же его уничтожая чтобы закрывать соединения и! при этом не писав репозитории на каждый чих изменений. DataGrid меняя строки вызывал события изменений данных в DataSet, а он сам уже создавал TableAdapter и сохранял изменения в базу.

Но в Entity все не так, и у меня это вызывает большой дискомфорт. В большинстве примерах пишутся репозитории в которых оборачивается DbContext который тут же уничтожается. И это повлекло за собой что я писал на каждый чих CRUD обработку событий DataGrid где он бы вызывал этот репозиторий для сохранения изменений.

Начав копать глубже я нашел пару статей. В которых это опровергалось. И утверждалось что DbContext сам закрывает соединения когда запрос выполнился.

Номер один

Номер два

Еще немного поискав я нашел, что и для ASP.NET MVC так же не требуются репозитории, так как контроллер уничтожается после обработки запроса и в некоторых фреимворках так же есть подобные DataGrid. Они отправляют события изменения данных и самому почти ничего не нужно писать для большинства случаев.

Попробовав написать без репозитория - создав один раз DbContext и не закрывающем его на всем протяжении работы приложения это сильно облегчило работу. Коллекции не уничтожаются, они связаны с контекстом который сам отправляет изменения. Но возникла небольшая проблема когда приложение работает очень долго при возобновлении работы вылетает исключение. Незнаю чем это вызвано. Думаю нужно просто отловить исключение, заного создать контекст и привязать все коллекции.

Вопрос в том - как же всё-таки удобнее и правильнее использовать контекст? С репозиториями/без или есть еще вариант по вашему?


Ответы (0 шт):