Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Update com Entity Framework

Tenho um campo "Status" no meu banco que gostaria de mudar para de "true" para "false" quando o usuário clicar em excluir o registro

                    <td class="buttom"><a onclick="return confirm('Confirma exclusão?')" href="@Url.Action("Excluir", "Municipio", new { id = municipio.Id })"><img src="~/Content/assets/img/xis.gif"></td>

o link ficaria assim...

http://localhost:51771/Municipio/Excluir/1


Como pode se ver no HTML estou passando o "Id" do Município que gostaria de excluir para o Controller ai é que está a dúvida, passo o "Id" ou o Objeto para o método Excluir e como ficaria o "update" desse campo "Status" utilizando o EF?

 public ActionResult Excluir(int id)
        {
    if (ModelState.IsValid)
    {

            municipioDAO.Exclui(???)

        }else{
            return View("Form", municipio);
        }
}

MunicipioDAO

public class MunicipioDAO
    {
        private FoxfatContext context;

        public MunicipioDAO(FoxfatContext context)
        {
            this.context = context;
        }
        public void Adiciona(CadMunicipio municipio)
        {
            context.CadMunicipios.Add(municipio);
            context.SaveChanges();


        }

        public void Exclui(?????){
            //Como atualizar o campo "Status" do "Id" recebido apenas?
        }


        public IList<CadMunicipio> Lista()
        {
            return context.CadMunicipios.ToList();
        }
    }

A entidade é essa...

public class CadMunicipio
    {
        public int Id { get; set; }

        public string Descricao { get; set; }

        [DefaultValue(true)]
        public bool Status { get; set; }
    }
2 respostas
solução!

Olá Osvalcir,

como objeto infelizmente você não tem como passar porque quem está enviando a informação é o navegador pelo HTML, que é marcação de texto e não orientado a objetos. No caso um link até poderia mandar todas as informações na requisição, como a descrição e o status, que o Model Binding do .net converteria isso para um objeto injetado como parâmetro da sua action. Mas no seu caso como as operações que deseja fazer são de remoção e update de status, somente receber o id será suficiente.

O que você precisa fazer em ambas as situações é primeiro com esse id recuperar do banco uma instância de CadMunicipio. Então poderia criar um método no MunicipioDAO que busca por id, recebendo esta informação como parâmetro e retornando um CadMunicipio.

Para te ajudar com isso, o DbSet possui o método Find que já faz a busca pela chave primária, então só precisaria fazer isso para buscar por id:

context.CadMunicipios.Find(idDoMunicipio);

E como agora você tem o CadMunicipio em mãos pode pedir sua remoção ou alterar o valor do Status de true para false.

Ai para fazer o update, o comando no entity framework é:

contexto.Entry( municipioASerAtualizado ).State = EntityState.Modified;
contexto.SaveChanges();

Obrigado Lucas, vou implementar e testar.