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.
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:
Ahora vamos a proceder a modificar el método Edit –> [HttpPost] del controller de Consultor.
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.
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:
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:
Cuando yo intente modificar el registro en la base de datos, voy a recibir el siguiente error:
2 comentarios:
Muy buenos, gracias por estos aportes ;) Un saludo desde España
Gracias Alexis
Publicar un comentario