This content originally appeared on DEV Community and was authored by Gabriel Batista
Se você estiver gerando seus próprios IDs ao usar Entity Framework e se deparar com um erro de concorrência, essa dica pode te ajudar!
Recentemente, enfrentei um problema interessante ao trabalhar com Entity Framework: um DbUpdateConcurrencyException aparentemente inexplicável ao tentar salvar novas entidades.
A funcionalidade era simples:
- Recuperar um Grupo do banco
- Adicionar um Membro ao Grupo
- Salvar tudo
O código parecia correto, mas sempre recebia:
DbUpdateConcurrencyException: The database operation was expected to affect 1 row(s), but actually affected 0 row(s)
O que acontece?
Esse erro ocorre porque, por padrão, o Entity Framework assume a responsabilidade de gerar e gerenciar os valores das chaves primárias das entidades. Quando você define manualmente um valor para uma chave que normalmente seria gerada, a entidade será rastreada como "Modified" em vez de "Added" e quando uma entidade é marcada como "Modified" em vez de "Added", o EF tenta fazer um UPDATE no banco em vez de um INSERT mas não existe registro para atualizar (é uma nova entidade)
Esse erro ocorre porque, por padrão, o Entity Framework assume a responsabilidade de gerar e gerenciar os valores das chaves primárias das entidades. Quando você define manualmente um valor para uma chave que normalmente seria gerada, a entidade é rastreada como "Modified" em vez de "Added". Como resultado, o EF tenta realizar um UPDATE no banco de dados em vez de um INSERT, mas não existe nenhum registro para atualizar (é uma nova entidade).
A solução? Configure explicitamente que a chave primária não deve ser gerada automaticamente. Isso pode ser feito no Fluent API:
builder.Property(t => t.Id).ValueGeneratedNever();
Ou com data annotations:
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public string Id { get; set; }
Espero que essa dica ajude você a evitar horas de debugging! 😉
This content originally appeared on DEV Community and was authored by Gabriel Batista
Gabriel Batista | Sciencx (2025-01-03T05:38:52+00:00) Como Resolver o Erro DbUpdateConcurrencyException no Entity Framework. Retrieved from https://www.scien.cx/2025/01/03/como-resolver-o-erro-dbupdateconcurrencyexception-no-entity-framework/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.