Я использую AutoFac для ввода конкретного контекста данных в своем веб-приложении. Я хочу выполнить метод SaveChanges()
контекста базы данных в конце запроса, если на странице не было исключений. В противном случае я просто хочу избавиться от контекста как обычно.Сохранить изменения DbContext с помощью AutoFac OnRelease?
Я заметил, что AutoFac имеет метод OnRelease
. Intellisense для метода заявляет:
Выполнение прилагаемого действия вместо удаления экземпляров, когда они больше не требуются.
Таким образом, я думал сделать что-то вроде этого:
builder.RegisterType<MyContext>().As<IDbContext>().InstancePerHttpRequest()
.OnRelease(x => {
if (HttpContext.Current != null && HttpContext.Current.Error == null)
x.SaveChanges();
if (x != null)
{
x.Dispose();
x = null;
}
});
Является ли это подходящее место для фиксации изменений для контекста данных? Гарантируется ли выполнение каждого запроса, даже если возникает исключение?
Александр, спасибо за ваш ответ. У меня есть возможность называть 'SaveChanges()' в моем коде, когда это необходимо. Кроме того, не удалось ли я обернуть 'SaveChanges()' в блок try/catch/finally так же, как в остальной части моего кода, чтобы справиться с вашими заботами об удалении? – Sam
@Sam «У меня есть возможность вызывать SaveChanges() в моем коде, когда это необходимо». Почему вы хотите объединить эти два подхода? Это приводит к ошибкам. «Я не могу обернуть SaveChanges() в блок try/catch/finally« Да, он будет работать, но ... :) –