Descartando las opciones 1 y 2 que comentás, lo que pretendo informar al
usuario es que cierta entidad no se puede borrar porque está referenciada
por otra; ciertamente puede considerarse esto como una regla de negocio,
pero en general dejo que estas restricciones las maneje el motor de BD
(lanzando una excepción)... no me convence implementar esta regla
explicitamente (buscar todas las entidades que pueden estar referenciando a
la que estoy queriendo borrar) ya que complicaría bastante las cosas.

2011/9/25 Nestor Andres Rodriguez <[email protected]>

> Bueno si falla el Delete probablemente es por:
>
> 1- Mal configurado NHibernate.
> 2- Problema de conexion
> 3- Integridad en los datos (i.e. integridad referencial).
>
> En el primer caso al cliente no le va a interesar que quedo mal configurado
> NHibernet.  En En el segundo caso no interesa si es en el Delete o en el
> final del Request.
> Y En el tercer caso si hay un problema de integridad de los datos
> (foreignKey violation, etc...) podria ser que:  o tienes mal configurado
> NHibernate como en el primer caso, o te esta haciendo falta modelar alguna
> regla de negocio la cual informara inmediatamente a tu usuario que no se
> puede borrar evitando el error en la BD, o tu BD esta manejando tu logica de
> negocio y creo que NHibernate no encajaria tan bien en ese modelo.
>
> Con respecto a forzar el Flush, pues no es recomendable, NHibernate lo hace
> muy bien.  Existe la opcion pero se usa para otros 
> casos<http://nhforge.org/doc/nh/en/index.html#manipulatingdata-flushing>.
>
>
> Saludos,
> Nestor Andres Rodriguez
>
> 2011/9/25 Germán Schuager <[email protected]>
>
>> Buenas, me surgió el siguiente problema/duda en una aplicación ASP.NETMVC 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

Responder a