Array
(
)

Implementação de isolamento em banco de dados

Michael Silva
   - 08 out 2015

Bom dia,
Estou implementando um sistema em .NET e durante a criação de uma tela com as operações CRUD para registros de veículos me surgiu uma dúvida.
Se alguém estiver editando um veículo e ao mesmo tempo outra pessoa abrir a tela de edição do mesmo registro, as alterações feitas pelas duas pessoas podem se sobreescrever.
Para evitar que isso aconteça, temos que implementar um mecanismo de isolamento de operações, que não permita que duas ou mais pessoas efetuam modificações concorrentes em um mesmo registro.
Eu implemento este mecanismo criando um campo de versão inteiro na tabela a ser protegida. A cada modificação do registro eu incremento a versão. E toda vez que vou fazer modificações eu executo instruções no formato "update [tabela] set .... where Id = [Id] and Versao = [versao carregada para edicao]". Assim se o registro foi modificado por alguém desde que a tela de edição foi carregada, o número de versão terá sido modificado e o update não altera nada. Eu então exibo uma mensagem para o usuário.
A dúvida é a seguinte, existe alguma forma melhor de fazer isso? Existe algum mecanismo do entity framework, ou específico de algum SGBD? Compartilhem soluções utilizadas em outras linguagens também.
Desde já, obrigado!

Harada
   - 21 out 2015

Você poderia manter um campo com a última data (com hora, minutos e segundos) que o registro foi alterado e ao clicar em editar você também pode ou exibir este campo, ou manter em memória para quando salvar verificar no banco se está data está igual, caso esteja ninguém realizou nenhuma alteração no registro, ou seja, sempre que alterar você verifica se esta data esta igual e depois você atualiza esta data.