tenho a seguintes classes:
public class Cliente { public int ClienteId { get; set; } public string Nome { get; set; } public string Endereco { get; set; } public DateTime DataNascimento { get; set; } public IList<Telefone> Telefones { get; set; } } public class Telefone { public virtual Cliente Cliente { get; set; } public int ClienteId { get; set; } public int TelefoneId { get; set; } public string Numero { get; set; } public virtual Marca Marca { get; set; } public int MarcaId { get; set; } } public class Marca { public int MarcaId { get; set; } public string descricao { get; set; } }
Acontece que o sistema grava o cliente e os telefones na coleção corretamente, porem o relacionamento entre telefone e marca, ele duplica a marca selecionada.
O relacionamento entre telefone e marca é do tipo estrangeira e não deve ser duplicado, ou seja para cada numero de telefone o sistema está criando uma marca nova.
Código do botão salvar:
[HttpPost] [ValidateAntiForgeryToken] public ActionResult IncluirCliente(Cliente cliente) { if (ModelState.IsValid) { if (cliente.Telefones != null) { foreach (Telefone telefoneItem in cliente.Telefones.ToList()) { var marca = db.Marcas.Find(telefoneItem.MarcaId); db.Entry(telefoneItem).State = EntityState.Added; } db.Clientes.Attach(cliente); } db.Clientes.Add(cliente); db.SaveChanges(); Session["cliente"] = null; return RedirectToAction("ListarCliente"); } return View(cliente); }
Resultado gerado no banco: Tabela de Marca IdMarca Descricao 1 Motorola 2 Sansung 10 NULL –> não deveria ser gerado!
Tabela de Telefone IdCliente IdTelefone Numero Tel IdMarca 11 11 222222222 10
O idMarca deveria ser igual 1 que foi selecionado, o sistema gerou um novo IdMarca =10 com a descricão NULL, este e o erro que preciso de ajuda.
Alguém pode me ajudar?