Fórum Como escrever esse UPDATE em expressão lambda? #553891
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)