Update personalizado no modelo de dados de aplicações Asp.Net MVC

Por padrão, o código gerado pelo Visual Studio quando você clica com o botão direito do mouse sobre a pasta Controller de sua aplicação e seleciona a opção Adicionar Controller, sempre irá atualizar todos os campos da sua entidade. Ocorre que muitas vezes, este não é o comportamento que quero implementar em algumas aplicações que construo.

Muitas vezes, tenho campos do tipo imagem ou informações que prefiro que não sejam exibidas no formulário de edição e o seu valor atual seja preservado. Nestes casos, é preciso modificar o comportamento padrão, que utiliza a propriedade State do objeto de contexto com o valor definido para EntityState.Modified, como ilustrado a seguir.

db.Entry(post).State = EntityState.Modified;

No caso de querer personalizar os campos ou propriedades que serão atualizadas pela função, utilize o método Attach disponibilizado pela instância do objeto que representa sua entidade no contexto da aplicação. Exemplo:

db.Projetos.Attach(projeto);

Defina o valor false para o atributo IsModified de todas as propriedades que não deseja atualizar e true para as demais. Veja no exemplo abaixo, que o código verifica se um arquivo foi enviado e define o valor da referida propriedade de acordo.


snippet-csharp-db.Entry.IsModified.png

Nos demais campos, a propriedade IsModified é definida com o valor true, e então o método SaveChanges() replica as alterações para o banco de dados.





Eryx Guimarães

Eryx Guimarães desenvolve e mantém soluções para empreendimentos na web.

Entre em Contato

Contato