EF Core - Atualizando apenas um campo
 Neste artigo veremos como atualizar um único campo de um registro de uma tabela no MySql usando o EF Core.


Ao atualizar registros com o EntityFramework Core, o comportamento padrão atualizará todos os campos desse registro no banco de dados, mesmo que os valores não sejam alterados para alguns campos.

 


 


Este artigo mostra como atualizar apenas um campo de um registro de uma tabela.

 

Para isso vamos usar o projeto Console que foi criado para acessar o banco de dados MySql neste artigo: C# - CRUD com MySQL via console com EF Core
 

Neste projeto para atualizar os dados de um Cliente usamos o código abaixo:

- Atualizar dados

static void AtualizarDadosMySql()
{
    using (var dbContext = new AppDbContext())
    {
        var cliente = dbContext.Clientes.Where(record => record.Id == 2).FirstOrDefault();
        cliente.Nome = "Paulo da Silva";
        dbContext.Update(cliente);
        dbContext.SaveChanges();

    }
    Console.WriteLine("\nDados atualizados...\n");
}

Aqui estamos atualizando o registro de Id igual a 2.

Atualizando somente um campo

 

Para atualizar somente um campo podemos simplesmente alterar o código do método acima usado para atualizar um registro.

 

Podemos também criar um novo método específico para o campo que desejamos atualizar.
 

Vamos fazer isso criando o método AtualizaSomenteNomeMySql() para o registro de id igual a 3.

 

static void AtualizaSomenteNomeMySql()
{
    using (var dbContext = new AppDbContext())
    {
        var cliente = new Cliente { Id = 3, Nome= "Augusta", Email="augusta@email.com" };
        dbContext.Attach(cliente);
        dbContext.Entry(cliente).Property(r => r.Nome).IsModified = true;
        dbContext.SaveChanges();
    }
}

 

Vamos alterar o menu de opções para poder selecionar esta opção :

Console.WriteLine("## Conexão com MySql ##");
while (true)
{
    Console.Write("\n(L)er e exibir dados");
    Console.Write("\n(I)ncluir dados");
    Console.Write("\n(A)tualizar dados");
    Console.Write("\n(D)eletar dados");
    Console.Write("\n(N)Atualiza somente o nome");
    Console.Write("\n(S)air\n");
    char opcao = Convert.ToChar(Console.ReadLine().ToLower());
    if (opcao == 'l')
        LerExibirDadosMySql();
    else if (opcao == 'i')
        IncluirDadosMySql();
    else if (opcao == 'a')
        AtualizarDadosMySql();
    else if (opcao == 'd')
        DeletarDadosMySql();
    else if (opcao == 'n')
        AtualizaSomenteNomeMySql();
    else if (opcao == 's')
        break;
    else
        Console.WriteLine("\nOpção inválida");    
}

Executando o projeto teremos:

Temos assim na tabela clientes no MySql os seguintes dados :

Vamos alterar somente o nome do cliente com id igual a 3 usando a instrução abaixo:

var cliente = new Cliente { Id = 3, Nome= "Augusta", Email="augusta@email.com" };

Selecionando a opção N e a seguir exindo os valores dos registros existentes vamos obter:

Verificando a tabela Clientes no MySQL teremos os seguintes valores :

Note que somente o nome do cliente foi alterado ambora na instrução tenhamos também alterado o email.

Pegue o projeto aqui :  EFCore6_MySql2.zip ... 

"Disse-lhe Jesus: Estou há tanto tempo convosco, e não me tendes conhecido, Filipe? Quem me vê a mim vê o Pai; e como dizes tu: Mostra-nos o Pai? "
João 14:9

Referências:


José Carlos Macoratti