Germán, esperar a las excepciones de la db para detectar validaciones
no es de las mejores prácticas. Es decir, si son situaciones que tu
negocio debería manejar no deberían estar en la db (posiblemente
deberían ser desarrolladas antes de que exista la db). Quizás este
enfoque te ayude.

De todas formas, si querés que seguir con esta metodología (yo varias
veces la utilizo), te sugiero que hagas un manejo de transacciones en
forma explícita, es decir, que tengas algo como:

try
{
   using (var tx = transactionManager.GetTransaction()) {
     dao.Delete(id);

     tx.Complete();
     return Json(null);
   }
}
catch (Exception ex)
{
  return Json(ex.Message);
}

saludos.
nelo


2011/9/25 Germán Schuager <[email protected]>:
> Mariano, gracias por la sugerencia.
> Usando session-per-action y un ActionFilter parece que se podría manejar la
> situación, aunque no se si no se termina complicando más de lo necesario....
> por eso estaba interesado en escuchar la experiencia de alguien que haya ido
> por ese lado.
>
> 2011/9/25 Mariano Ravinale <[email protected]>
>>
>> Hola:
>>
>> Quizas se podria probar de utilizar "Session-Per-Action":
>>
>>
>> http://ayende.com/blog/4809/refactoring-toward-frictionless-odorless-code-what-about-transactions
>>
>>
>> http://geeks.ms/blogs/gtorres/archive/2009/11/04/aspnet-mvc-nhibernate-session-per-request-y-action-filters.aspx
>> (Ver tambien los comentarios de Fabio y Carlos)
>>
>> o creando algun Acton Filter para forzar el Flush y customizar el manejo
>> de errores.
>> Saludos,
>> Mariano
>>
>> El día 25 de septiembre de 2011 12:06, Germán Schuager
>> <[email protected]> escribió:
>> > Buenas, me surgió el siguiente problema/duda en una aplicación ASP.NET
>> > MVC
>> > en la cual estoy usando session-per-request y me gustaría saber como lo
>> > manejan ustedes.
>> > Tengo algo similar a esto:
>> > public ActionResult Delete(int id)
>> > {
>> > try
>> > {
>> > dao.Delete(id);
>> > return Json(null);
>> > }
>> > catch (Exception ex)
>> > {
>> > return Json(ex.Message);
>> > }
>> > }
>> > La idea es que si el Delete falla (por ej. por un problema de integridad
>> > referencial), me llegue al cliente el mensaje de error.
>> > El problema es que el Delete no va a fallar hasta que se haga el Flush
>> > de la
>> > session actual, lo cual se realiza al final del request... fuera de la
>> > ejecución del action en cuestión.
>> > La única forma que se me ocurrió de lograr lo que quiero, es hacer el
>> > Flush
>> > (usando alguna abstracción) antes del "return Json(null)".
>> > Se me ocurre que esta misma situación se presenta ante un conflicto de
>> > concurrencia.
>> > Como resuelven ustedes este tipo de cosas?
>> >
>> > --
>> > Para escribir al Grupo, hágalo a esta dirección:
>> > [email protected]
>> > Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>>
>> --
>> Para escribir al Grupo, hágalo a esta dirección:
>> [email protected]
>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>
> --
> Para escribir al Grupo, hágalo a esta dirección:
> [email protected]
> Para más, visite: http://groups.google.com/group/NHibernate-Hispano

-- 
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano

Responder a