Entity Framework – Como atualizar apenas um campo?

Olá,

O Entity Framework, como todos sabem, é uma ferramenta de mapeamento objeto-relacional. E realiza ações como seleção, inclusão, atualização e exclusão de dados. Dentre estas simples operações podemos ter controle de grande parte de seu funcionamento.

Assim como podemos, em uma query, selecionar apenas um conjunto de campos que queremos recuperar do banco de dados, podemos indicar que queremos apenas atualizar um conjunto de campos, não toda a estrutura da entidade sob edição.

Vamos supor um exemplo simples: temos um recurso em nosso sistema que deve executar a atualização do e-mail de nosso usuário. Nossa aplicação deve ser capaz de atualizar apenas o campo e-mail de nosso banco de dados, sem atualizar nenhum outro campo no banco de dados (mesmo que seja com seus valores atuais). Para tanto, devemos fazer algo como o código abaixo:

Usuario novoUsuario = new Usuario();
novoUsuario.Email = "fernando@hotmail.com";
novoUsuario.Nome = "Fernando Henrique";

using (Contexto dataBase = new Contexto())
{
    dataBase.Usuarios.Add(novoUsuario);
    dataBase.SaveChanges();
}
            
novoUsuario.Email = "fernando@outlook.com";

using (Contexto dataBase = new Contexto())
{
    dataBase.Usuarios.Attach(novoUsuario);

    // Marcar a propriedade E-Mail como modificada
    dataBase.Entry(novoUsuario).Property(u => u.Email).IsModified = true;

    dataBase.SaveChanges();
}

O que estamos fazendo é bastante simples, estamos apenas acessando a coleção de propriedades mapeadas pelo Entity Framework e marcando a propriedade que queremos atualizar como modificada. Fácil não?

Por

Fernando Henrique Inocêncio Borba Ferreira

Microsoft Most Valuable Professional – Data Platform Development

Publicidade

4 comentários sobre “Entity Framework – Como atualizar apenas um campo?

  1. Eu estava precisando disto, mas meu caso é diferente.
    Tenho duas classes:

    * Anexo
    – int id
    – string nome
    – byte[] arquivo

    * Contas a pagar
    – int id
    – string descrição
    – anexo boleto

    Quero atualizar só o boleto do contas a pagar, mas não funcionou.

    public void AtualizaBoleto(ContasaPagar entidade)
    {
    try
    {
    using (var banco = new Contexto())
    {

    banco.ContasApagar.Attach(entidade);

    banco.Entry(entidade).Property(u => u.Boleto).IsModified = true;

    banco.SaveChanges();

    }
    }
    catch (Exception)
    {
    throw;
    }

    }

    Erro: Attaching an entity of type ‘BE.Anexo’ failed because another entity of the same type already has the same primary key value. This can happen when using the ‘Attach’ method or setting the state of an entity to ‘Unchanged’ or ‘Modified’ if any entities in the graph have conflicting key values. This may be because some entities are new and have not yet received database-generated key values. In this case use the ‘Add’ method or the ‘Added’ entity state to track the graph and then set the state of non-new entities to ‘Unchanged’ or ‘Modified’ as appropriate.

    O erro acontece no Attach.

  2. Muito Obrigado!!! Estava aqui caçando como resolver meu problema e seu trecho de código me ajudou bastante.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.