Аналогично предыдущий вопрос Я борюсь с фиксацией транзакций и обработкой исключений.Однако, в отличие от решения, представленного там, я хотел бы решить его с помощью actionfilter.В настоящее время у меня есть код в ActionFilter, который выглядит следующим образом:
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
base.OnResultExecuted(filterContext);
// Errors == ROLLBACK UoW
// No Errors == COMMIT UoW
if (UnitOfWork != null)
{
if (filterContext.Exception == null || filterContext.ExceptionHandled == true)
{
try
{
UnitOfWork.Commit();
log.Debug("Transaction committed");
}
catch (Exception e)
{
UnitOfWork.Rollback();
log.Error("Transaction rolled back: " + e.Message + (e.InnerException != null ? "" : "; " + e.InnerException.Message), e);
}
}
else
{
UnitOfWork.Rollback();
log.Warn("Transaction rolled back: " + filterContext.Exception.Message + (filterContext.Exception.InnerException == null ? "" : "; " + filterContext.Exception.InnerException.Message), filterContext.Exception);
}
}
}
Это в основном работает.Однако, когда возникает исключение, я не могу сообщить пользователю об откате.Также было бы правильно сделать коммит в OnResultExecuting?Как я могу сообщить пользователю, что откат сделан?Во-вторых, при успешной фиксации иногда необходимо отправлять электронные письма.Как я могу получить список писем для отправки в ActionFilter?