9.21.2011

Concurrencia y el Entity Framework – Parte 2

Continuando con el post anterior vamos a dar las soluciones que están al alcance de los que desarrollamos aplicaciones usando el Entity Framework. En este post (2 / 3 ) vamos a utilizar los timestamps para identificar si una columna ha cambiado.

Agregar columna timestamp

Inicialmente vamos a agregar una propiedad para tracking dentro de la entidad Consultor, esta propiedad será de tipo Byte[] y utilizará una anotación –> atributo <— del namespace del Entity Framework que le servirá para reconocer que esta columna debe ser parte de las sentencias Update y Delete en la parte del Where.

image

Hay que destacar que la base de datos original debemos eliminarla para que se recree de nuevo o modificarle la tabla consultor para que soporte el nuevo campo agregado. Si la opción es esto ultimo el campo a agregar debe lucir como el siguiente:

image

Ahora vamos a proceder a modificar el método Edit –> [HttpPost] del controller de Consultor.

image

Como podemos ver en el código anterior, tenemos que atrapar una excepción específica para saber si hubo un problema de concurrencia con el registro que estamos trabajando. El mensaje de error se agrega al ModelState y la llave del error se deja en blanco, lo que provoca que cuando se solicite de nuevo la vista actual con la tipificación del consultor, el mensaje de error se despliegue en la página – se puede encontrar más información acerca del ModelState en este link.

Tenemos también que agregar la nueva propiedad a la vista de edición del Consultor, en esto lo hacemos agregando un hidden field seguido del campo del Id.

image

Ahora si intentamos modificar un registro que ya fue modificado posteriormente a nuestra consulta, veremos el error de concurrencia aparecer en nuestra página.

Por ejemplo, si estamos editando el registro y queremos cambiarlo como se ve en la figura siguiente:

image

Pero otro usuario desde otro navegador hace el cambio y lo refleja en la base de datos antes de que yo haga el “submit” del mío:

image

Cuando yo intente modificar el registro en la base de datos, voy a recibir el siguiente error:

image

Etiquetas de Technorati: ,

2 comentarios:

Alexis dijo...

Muy buenos, gracias por estos aportes ;) Un saludo desde España

Diego Rojas dijo...

Gracias Alexis