1
resposta

Open Session in view

Não entendi onde tem de ser aplicado essa modificação na aplicação.

Como explicado no enunciado, precisamos apenas mover o código do OnActionExecuted para o OnResultExecuted. O OnResultExecuted é executado depois do código da view, porém apenas quando a action não lança uma exceção. No caso em que a action lança uma exceção, o código do OnResultExecuted não é executado e portanto não fazemos o rollback da transação. Para resolver esse problema, precisamos verificar se existe alguma exceção no método OnActionExecuted caso a exceção seja diferente de null, queremos fazer o rollback da transação e fechar a sessão:

public override void OnActionExecuted(ActionExecutedContext filterContext)
{
    if (filterContext.Exception != null)
    {
        session.Transaction.Rollback();
        session.Close();
    }
}
1 resposta

Oi Marcos,

Na mesma classe onde está escrito esse método, move o código dele para o método OnResultExecuted.. Caso esse método não exista, basta criá-lo.

public override void OnResultExecuted(ActionExecutedContext filterContext)
{
    if (filterContext.Exception != null)
    {
        session.Transaction.Rollback();
        session.Close();
    }
}