Como escrever esse UPDATE em expressão lambda?
12/05/2016
0
Boa tarde,
Estou enfrentando muitos problemas com essas expressões lambdas. Preciso fazer um update em apenas 3 colunas, sendo que em apenas uma delas o usuário vai digitar o valor.
O grande problema é que se eu não carrego todos os dados na view, todas as colunas da tabela perdem o valor que estava lá, ficando apenas os que eu exibi e o novo valor.
O update seria no caso da demissão de um funcionário, quando o usuário demitir o funcionário a aplicação troca o valor da coluna StatusFunc para Inativo, guarda a data da alteração e a data de demissão digitada pelo usuário.
Como eu devo fazer isso? Na view eu utilizei o template Edit, e deixei apenas os campos Nome, Nº de Registro, Data de Admissão e o Data de Demissão que será salvo na tabela. Segue o código da action, ele está dando erro na hora de salvar os dados, parece que o objeto fucionario perde os valores dos atributos que não estão na view...
O comando em SQL seria mais ou menos assim:
Obrigado.
Estou enfrentando muitos problemas com essas expressões lambdas. Preciso fazer um update em apenas 3 colunas, sendo que em apenas uma delas o usuário vai digitar o valor.
O grande problema é que se eu não carrego todos os dados na view, todas as colunas da tabela perdem o valor que estava lá, ficando apenas os que eu exibi e o novo valor.
O update seria no caso da demissão de um funcionário, quando o usuário demitir o funcionário a aplicação troca o valor da coluna StatusFunc para Inativo, guarda a data da alteração e a data de demissão digitada pelo usuário.
Como eu devo fazer isso? Na view eu utilizei o template Edit, e deixei apenas os campos Nome, Nº de Registro, Data de Admissão e o Data de Demissão que será salvo na tabela. Segue o código da action, ele está dando erro na hora de salvar os dados, parece que o objeto fucionario perde os valores dos atributos que não estão na view...
public ActionResult Teste(long id) { var funcionario = db.Funcionarios.Find(id); ViewBag.IDArea = new SelectList(db.Areas, "IDArea", "Nome", funcionario.IDArea); ViewBag.IDCargo = new SelectList(db.Cargos, "IDCargo", "Nome", funcionario.IDCargo); ViewBag.IDEmpregador = new SelectList(db.Empregadores, "IDEmpregador", "Nome", funcionario.IDEmpregador); return View(funcionario); } [HttpPost] public ActionResult Teste(Funcionarios funcionario) { if (ModelState.IsValid) { funcionario.StatusFunc = "Inativo"; funcionario.UltimaAtualizacao = DateTime.Now; db.Entry(funcionario).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("FuncionariosAtivos"); } return View(funcionario); }
O comando em SQL seria mais ou menos assim:
update Funcionarios set StatusFunc = 'Inativo', UltimaAtualizacao= GETDATE(), DataDesligamento = 'funcionario.DataDesligamento - DIGITADO PELO USUÁRIO' where IDFuncionario = @id
Obrigado.
Ricardo
Curtir tópico
+ 0
Responder
Posts
13/05/2016
Ricardo
Boa tarde,
Consegui fazer o update em apenas 3 colunas do banco de dados, porem acho que deve ter uma forma melhor para fazer isso, pois no exemplo que encontrei eu tenho que citar todas as colunas do banco e falar quais sofrerão alteração e quais não sofrerão, se a tabela tiver 30 colunas e eu precisar alterar apenas uma o comando vai ficar gigante..
Segue o comando que utilizei:
Só alterei as 3 ultimas colunas, as duas primeiras eu defini o valor na própria action e o valor da terceira coluna é digitado pelo usuário na view.
Existe uma forma melhor de fazer esse update?
Att.,
Consegui fazer o update em apenas 3 colunas do banco de dados, porem acho que deve ter uma forma melhor para fazer isso, pois no exemplo que encontrei eu tenho que citar todas as colunas do banco e falar quais sofrerão alteração e quais não sofrerão, se a tabela tiver 30 colunas e eu precisar alterar apenas uma o comando vai ficar gigante..
Segue o comando que utilizei:
[HttpPost] public ActionResult Demitir(Funcionarios funcionario) { if (ModelState.IsValid) { funcionario.StatusFunc = "Inativo"; funcionario.UltimaAtualizacao = DateTime.Now; db.Funcionarios.Attach(funcionario); var teste = db.Entry(funcionario); teste.Property("Nome").IsModified = false; teste.Property("Registro").IsModified = false; teste.Property("Ramal").IsModified = false; teste.Property("DTNasc").IsModified = false; teste.Property("IDArea").IsModified = false; teste.Property("IDCargo").IsModified = false; teste.Property("IDEmpregador").IsModified = false; teste.Property("DTAdmissao").IsModified = false; teste.Property("HrEntra").IsModified = false; teste.Property("Hrsai").IsModified = false; teste.Property("TipoFunc").IsModified = false; teste.Property("CPF").IsModified = false; teste.Property("StatusFunc").IsModified = true; teste.Property("UltimaAtualizacao").IsModified = true; teste.Property("DataDesligamento").IsModified = true; db.SaveChanges(); return RedirectToAction("FuncionariosAtivos"); } return View(funcionario); }
Só alterei as 3 ultimas colunas, as duas primeiras eu defini o valor na própria action e o valor da terceira coluna é digitado pelo usuário na view.
Existe uma forma melhor de fazer esse update?
Att.,
Responder
Clique aqui para fazer login e interagir na Comunidade :)