public ActionResult Create([Bind(Include="Id,Login,Nome,Senha,IdPerfil,IdFilial,Email,Empresa,Cpf,Rg,Endereco,NumeroEndereco,Bairro,Cidade,Uf,Cep,Ativo,TrocarSenha,Complemento")] UsuarioViewModel usuarioVM)
        {
            Seguranca.ValidaAcesso(1);
            MontaListaTelefones(Request, usuarioVM);

            if (ModelState.IsValid)
            {
                usuarioVM.Cpf = usuarioVM.Cpf.Replace(".","").Replace("-","");
                if (usuarioVM.Cep != null)
                    usuarioVM.Cep = usuarioVM.Cep.Replace("-","");

                var usuario = new Usuario();
                TransferePropriedades(usuarioVM, usuario);
                db.Usuarios.Add(usuario);

                try
                {
                    db.SaveChanges();

                    foreach (var t in usuarioVM.Telefones)
                    {
                        db.TelefonesUsuario.Add(new TelefoneUsuario { IdUsuario = usuario.Id, Telefone = t.Telefone, IdTipoTelefone = t.IdTipoTelefone });
                    }

                    db.SaveChanges();
                }
                catch (DbEntityValidationException e)
                {
                    StringBuilder sb = new StringBuilder();
                    foreach (var eve in e.EntityValidationErrors)
                    {
                        sb.AppendLine(string.Format("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                                        eve.Entry.Entity.GetType().Name,
                                                        eve.Entry.State));
                        foreach (var ve in eve.ValidationErrors)
                        {
                            sb.AppendLine(string.Format("- Property: \"{0}\", Error: \"{1}\"",
                                                        ve.PropertyName,
                                                        ve.ErrorMessage));
                        }
                    }
                    throw new DbEntityValidationException(sb.ToString(), e);
                }

                return RedirectToAction("Index");
            }

            ViewBag.IdFilial = new SelectList(db.Filiais, "Id", "Nome", usuarioVM.IdFilial);
            ViewBag.IdPerfil = new SelectList(db.Perfis, "Id", "Nome", usuarioVM.IdPerfil);
            ViewBag.IdTipoTelefone = new SelectList(db.TiposTelefone, "Id", "Nome");
            ViewBag.TiposTelefone = db.TiposTelefone;
            return View(usuarioVM);
        }
 private void TransferePropriedades( UsuarioViewModel usuOrigem, Usuario usuDestino)
 {
     usuDestino.Id = usuOrigem.Id;
     usuDestino.Login = usuOrigem.Login;
     usuDestino.Nome = usuOrigem.Nome;
     usuDestino.IdPerfil = usuOrigem.IdPerfil;
     usuDestino.IdFilial = usuOrigem.IdFilial;
     usuDestino.Email = usuOrigem.Email;
     usuDestino.Empresa = usuOrigem.Empresa;
     usuDestino.Cpf = usuOrigem.Cpf;
     usuDestino.Rg = usuOrigem.Rg;
     usuDestino.Endereco = usuOrigem.Endereco;
     usuDestino.NumeroEndereco = usuOrigem.NumeroEndereco;
     usuDestino.Bairro = usuOrigem.Bairro;
     usuDestino.Cidade = usuOrigem.Cidade;
     usuDestino.Uf = usuOrigem.Uf;
     usuDestino.Cep = usuOrigem.Cep;
     usuDestino.Ativo = usuOrigem.Ativo;
     usuDestino.TrocarSenha = usuOrigem.TrocarSenha;
     usuDestino.Complemento = usuOrigem.Complemento;
 }
        public ActionResult Edit([Bind(Include="Id,Login,Nome,Senha,IdPerfil,IdFilial,Email,Empresa,Cpf,Rg,Endereco,NumeroEndereco,Bairro,Cidade,Uf,Cep,Ativo,TrocarSenha,Complemento")] UsuarioViewModel usuarioVM)
        {
            Seguranca.ValidaAcesso(2);
            MontaListaTelefones(Request, usuarioVM);

            if (ModelState.IsValid)
            {
                usuarioVM.Cpf = usuarioVM.Cpf.Replace(".","").Replace("-","");
                if (usuarioVM.Cep != null)
                    usuarioVM.Cep = usuarioVM.Cep.Replace("-","");

                var usuario = new Usuario();
                TransferePropriedades(usuarioVM, usuario);

                db.Entry(usuario).State = EntityState.Modified;

                try
                {
                    db.SaveChanges();

                    int? sequencia = db.ObtemSequencia().FirstOrDefault();

                    foreach (var item in usuarioVM.Telefones)
                    {
                        db.Database.ExecuteSqlCommand("insert into AuxTelefoneUsuario (Seq, IdUsuario, IdTipoTelefone, Telefone) values({0}, {1}, {2}, {3})",
                            sequencia, usuario.Id, item.IdTipoTelefone, item.Telefone);
                    }
                    db.GravaTelefonesUsuario(sequencia, usuario.Id);
                }
                catch (DbEntityValidationException e)
                {
                    StringBuilder sb = new StringBuilder();
                    foreach (var eve in e.EntityValidationErrors)
                    {
                        sb.AppendLine(string.Format("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                                        eve.Entry.Entity.GetType().Name,
                                                        eve.Entry.State));
                        foreach (var ve in eve.ValidationErrors)
                        {
                            sb.AppendLine(string.Format("- Property: \"{0}\", Error: \"{1}\"",
                                                        ve.PropertyName,
                                                        ve.ErrorMessage));
                        }
                    }
                    throw new DbEntityValidationException(sb.ToString(), e);
                }
                return RedirectToAction("Index");
            }
            ViewBag.IdFilial = new SelectList(db.Filiais, "Id", "Nome", usuarioVM.IdFilial);
            ViewBag.IdPerfil = new SelectList(db.Perfis, "Id", "Nome", usuarioVM.IdPerfil);
            ViewBag.IdTipoTelefone = new SelectList(db.TiposTelefone, "Id", "Nome");
            ViewBag.TiposTelefone = db.TiposTelefone;
            return View(usuarioVM);
        }