Usuário com melhor resposta
Alterar somente algumas propriedades do model

Pergunta
-
Tenho a classe locação que possui algumas propriedades.. uma delas é uma classe do tipo Veiculo.
Tenho uma view de cadastro de locação.. o usuário digita algumas informações de locação e tambem as informações do veiculo.. na hora de gravar verifico se o veiculo já existe e então atualizo ele, caso contrário insiro no banco.
O problema é que a view não tem todas as propriedades do veiculo como por exemplo o Id do dono.. portanto quando atualizo, o id do dono sempre torna-se null no banco.
Como faço para isto não acontecer?
Estou fazendo da forma abaixo mas ocorre erro:
[HttpPost] public ActionResult Create([Bind(Exclude = "Id")]Locacao locacao) { if (ModelState.IsValid) { db.Locacao.Add(locacao); var veiculo_in_database = db.Veiculo.First(v => v.Placa == locacao.Veiculo.Placa); if (veiculo_in_database != null) { veiculo_in_database.Marca = "testeee"; locacao.Veiculo.Marca = veiculo_in_database.Marca; // quero atualizar somente esse locacao.Veiculo.ClienteId = veiculo_in_database.ClienteId; // e essa db.Entry(locacao.Veiculo).CurrentValues.SetValues(veiculo_in_database); db.Entry(locacao.Veiculo).State = EntityState.Modified; } db.SaveChanges(); return RedirectToAction("Index"); } ViewBag.Tipo = new SelectList(db.Tipo.ToList(), "Id", "Descricao"); return View(locacao); }
http://www.linkedin.com/pub/murilo-kunze/44/191/455
Respostas
-
Olá Murilo,
O update do EF vai atualizar todas as colunas.
Se vc deseja atualizar só algumas então eu acredito que o melhor seja utilizar uma stored procedure.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique- Sugerido como Resposta AndreAlvesLimaModerator segunda-feira, 16 de abril de 2012 17:42
- Marcado como Resposta Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee, Moderator segunda-feira, 30 de abril de 2012 17:05
Todas as Respostas
-
Olá Murilo,
O update do EF vai atualizar todas as colunas.
Se vc deseja atualizar só algumas então eu acredito que o melhor seja utilizar uma stored procedure.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique- Sugerido como Resposta AndreAlvesLimaModerator segunda-feira, 16 de abril de 2012 17:42
- Marcado como Resposta Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee, Moderator segunda-feira, 30 de abril de 2012 17:05
-
Alguma evolução, Murilão?
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique