Implementação de isolamento em banco de dados

08/10/2015

0

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!
Michael Silva

Michael Silva

Responder

Posts

21/10/2015

Edison Harada

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.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar