Usuário com melhor resposta
Editar dados de duas tabelas utilizando a ViewModel.

Pergunta
-
Tenho duas tabelas uma cliente e outra dadosclientes, só estou conseguindo editar os dados de clientes, coloquei os clientes e dadosclientes em uma ViewModel para serem alterados, conforme o código abaixo.
public class ClientesCadastradosViewModels
{
public int Id { get; set; }
public string Email { get; set; }
public string Nome { get; set; }
public DateTime DataCadastro { get; set; }
public DateTime Data { get; set; }
public string Complemento { get; set; }
public string Cpf { get; set; }
public string Telefone { get; set; }
public string Celular { get; set; }
public string Bairro { get; set; }
public string Cep { get; set; }
public ClientesCadastradosViewModels()
{
}
public ClientesCadastradosViewModels(Cliente ViewModel)
{
Id = ViewModel.Id;
Nome = ViewModel.Nome;
Email = ViewModel.Email;
DataCadastro = ViewModel.DataCadastro;
}
public ClientesCadastradosViewModels(DadosCliente ViewModel)
{
Cpf = ViewModel.CPF;
Telefone = ViewModel.Telefone;
Cep = ViewModel.CEP;
Data = ViewModel.DataNascimento;
Bairro = ViewModel.Bairro;
Complemento = ViewModel.Complemento;
}
public object ToUpdate()
{
return new
{
Nome = this.Nome,
Email = this.Email,
DataCadastro = this.DataCadastro,
Cpf = this.Cpf,
Telefone = this.Telefone,
Cep = this.Cep,
Data = this.Data,
Bairro = this.Bairro,
Complemento = this.Complemento
};
}//Controler
public ActionResult Editar(int id)
{
var viewModel = (from c in _db.ClienteSet
join d in _db.DadosClienteSet on c.Id equals d.IdCliente
where c.Id == id
select new ClientesCadastradosViewModels
{
Id = c.Id,
Nome = c.Nome,
Email = c.Email,
DataCadastro = c.DataCadastro,
Cpf = d.CPF,
Telefone = d.Telefone,
Cep = d.CEP,
Data = d.DataNascimento,
Bairro = d.Bairro,
Complemento = d.Complemento
}).SingleOrDefault();
return View(viewModel);
}
[HttpPost]
public ActionResult Editar(int id, ClientesCadastradosViewModels view)
{
if (ModelState.IsValid)
{
var Editarcliente = _db.ClienteSet.Find(id);
var entry = _db.Entry(Editarcliente);
entry.CurrentValues.SetValues(view.ToUpdate());
_db.SaveChanges();
return RedirectToAction("Buscar");
}
return View();
}
Respostas
-
Consegui resolver, na verdade por ser meu primeiro projeto não consegui explicar da maneira correta mais valeu!! segue o código com a solução ..
if (ModelState.IsValid)
{
var Editarcliente = _db.ClienteSet.Find(id);
var entry = _db.Entry(Editarcliente);
entry.CurrentValues.SetValues(view.ToUpdate());
//--------------------------------------------------------------------
var editarDados = _db.DadosClienteSet.Where(x => x.IdCliente == id).SingleOrDefault();
var entry2 = _db.Entry(editarDados);
entry2.CurrentValues.SetValues(view.ToUpdateDados());
//--------------------------------------------------------------------
_db.SaveChanges();- Sugerido como Resposta Paulo M Dalbosco quarta-feira, 5 de dezembro de 2012 15:29
- Marcado como Resposta juniorleles quarta-feira, 5 de dezembro de 2012 16:15
Todas as Respostas
-
-
Bom dia Paulo, não sei se vou conseguir te explicar da maneira correta,
Tenho essas duas listas clientes e dadosclientes referente as tabalas clientes e Dadosclientes.
public DbSet<Cliente> ClienteSet { get; set; }
public DbSet<DadosCliente> DadosClienteSet { get; set; }Quando vou editar só consigo pegar o Id do cliente que seria o ClienteSet, queria saber como eu faço parar editar os dados do DadosClienteSet
não sei se essa é a melhor maneira.
[HttpPost]
public ActionResult Editar(int id, ClientesCadastradosViewModels view)
{
if (ModelState.IsValid)
{
var Editarcliente = _db.ClienteSet.Find(id);
var entry = _db.Entry(Editarcliente);
entry.CurrentValues.SetValues(view.ToUpdate());
_db.SaveChanges();
return RedirectToAction("Buscar");
}
return View();
} -
-
Sim esta chegando o ID do cliente, sim um ActionLink, queria saber como eu faço para editar os dadoscliente se existe outra maneira?
- Marcado como Resposta juniorleles quarta-feira, 5 de dezembro de 2012 15:11
- Não Marcado como Resposta juniorleles quarta-feira, 5 de dezembro de 2012 15:12
-
Só para eu poder entender.
Esta função eh de Post, antes de chegar aqui ele passou pelo get, lhe retornou os dados do banco em uma view, vc alterou e deu um "post" que chegou nesta função.
Qual forma diferente dessa vc gostaria de fazer?
- Marcado como Resposta juniorleles quarta-feira, 5 de dezembro de 2012 15:08
- Não Marcado como Resposta juniorleles quarta-feira, 5 de dezembro de 2012 15:10
-
Consegui resolver, na verdade por ser meu primeiro projeto não consegui explicar da maneira correta mais valeu!! segue o código com a solução ..
if (ModelState.IsValid)
{
var Editarcliente = _db.ClienteSet.Find(id);
var entry = _db.Entry(Editarcliente);
entry.CurrentValues.SetValues(view.ToUpdate());
//--------------------------------------------------------------------
var editarDados = _db.DadosClienteSet.Where(x => x.IdCliente == id).SingleOrDefault();
var entry2 = _db.Entry(editarDados);
entry2.CurrentValues.SetValues(view.ToUpdateDados());
//--------------------------------------------------------------------
_db.SaveChanges();- Sugerido como Resposta Paulo M Dalbosco quarta-feira, 5 de dezembro de 2012 15:29
- Marcado como Resposta juniorleles quarta-feira, 5 de dezembro de 2012 16:15