Un escenario común para Business pero no elegante en NHibernate

Aquí está mi situación simple: común para la mayoría de los negocios...

  • Supongamos que tenemos Mis Pedidos que consisten en Artículos.[ Padre-Niño]
  • Hay 2 usuarios en el Sistema: UsuarioA y UsuarioB
  • El usuario A crea un pedido que tiene 3 artículos. Y guardarlo en la base de datos.
  • Mientras tanto, el Usuario B abre el Pedido guardado justo antes por el Usuario A para leer los Artículos del Pedido.
  • Luego, el Usuario A elimina el Artículo 1 de Pedidos y lo guarda. Todo está bien
  • Finalmente, UserB eliminó el elemento 3 e intente guardar ...

Y NHibernate da "StaleObjectStateException"...

Entonces, ¿cómo manejar esta situación para que İtem1 y Item3 se eliminen y no obtengamos "StaleObjectStateException"... con NHibernate?

preguntado el 12 de junio de 12 a las 16:06

1 Respuestas

Creo que debería detectar la excepción y hacerle saber al usuario que otra persona ya actualizó el elemento, volver a cargar la entidad desde la base de datos y dejar que el usuario decida qué hacer después de verificar los nuevos datos.

También puede aplicar un bloqueo pesimista si no desea permitir que los usuarios editen la misma entidad al mismo tiempo.

Consulta Documentación de NHibernate para obtener más información sobre las estrategias de control de concurrencia.

Este planteamiento de « La publicación de Ayende Rahien también es una muy buena referencia.

Respondido el 12 de junio de 12 a las 16:06

El bloqueo Pesimistick no evita ""StaleObjectStateException". - Novalis

@Novalis: ¿Cómo es eso? si lo usa bien, debería funcionar ya que estableció un bloqueo sobre el registro para que nadie más pueda hacer nada con él hasta que se libere el bloqueo. - claudio redi

Bueno, sigue mi escenario... Y obtendrás "StaleObjectStateException"... El documento de Ayende Rahien también dice que puedes obtener esta excepción... - Novalis

@Novalis: obtendrá una excepción de tiempo de espera si no puede obtener el bloqueo pero no una StaleObjectStateException. Lo siento, pero no veo donde dice Ayende que podrías conseguirlo. - claudio redi

"Como probablemente pueda adivinar, si la versión no coincide, obtendremos StaleObjectException". en su enlace a Ayende Post... En mi escenario la versión no coincide... - Novalis

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.