Читаю код одного web-приложения (ASP.NET MVC). В нем для доступа к данным используется Entity Framework. Есть класс Repository который заключает в себе логику работы с EF. Сам DbContext создается "лениво" по первому обращению к нему. Класс Repository реализует интерфейс IDisposable, в котором происходит вот что:
public void Dispose()
{
MyDbContext.SaveChanges();
MyContext.Dispose();
}
То есть на протяжении работы с репозиторием вплоть до его Dispose изменения в бд накапливаются, а сохраняются уже при вызове Dispose. Сам же репот\зиторий диспозится по окончании запроса:
protected void Application_EndRequest(object sender, EventArgs e)
{
try
{
Repository.Dispose();
}
catch (Exception ex)
{
Log.Error(ex.ToString());
}
}
Вроде бы логично - во время жизни запроса жив и репозиторий, и он накапливает изменения в бд, а по окончании запроса изменения пишутся в бд. Вроде бы логично - мы не дергаем на каждый чих метод SaveChanges, а пишем всё один раз (при необходимости сделать изменения здесь и сейчас такая возможность тоже есть).
Однако везде я вижу вот такое использование контекста:
using(var ctx = new DbContext())
{
// код работы с бд
}
То есть контекст диспозится сразу же, и сразу же сохраняются изменения.
То есть подхода, описанного выше, я нигде, кроме как в этом коде не видел.
Насколько он правилен и нет ли у него каких-то недостатков по сравнению с использованием using
сразу же?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть самый простой ListView в котором 1000+ записейМне нужно использовать это как список Items, чтобы Items не выделялись и при нажатии на стрелки не обводились...
Я изучаю C# и пытаюсь понять что такое стек и кучаВ большинстве примеров, стек подается как массив у которого есть функции push() и pop()
Создал бесконечный секундомер который отсчитывает от 5 до 0, а когда значение секундомера доходит до нуля, начинает считать заново:
Как выполнить код (к примеру запустить CrashReporterexe) в случае вылета приложения?