public async Task <IActionResult> Edit(string returnUrl = null) { // VERIFICA SE TEM USUARIO LOGADO var user = await _userManager.GetUserAsync(User); if (user == null) { throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); } // BUSCA O CADASTRO DE CLIENTE LOGADO var pessoa = _context.Pessoas.Include(x => x.Cliente).ThenInclude(y => y.Owner).SingleOrDefault(x => x.Cliente.Owner.Id == user.Id); if (pessoa == null) { // CLIENTE NOVO pessoa = new Pessoa() { Cliente = new Cliente { Owner = user } } } ; var pessoaEditViewModel = new PessoaEditViewModel(); pessoaEditViewModel = AutoMapper.Mapper.Map <PessoaEditViewModel>(pessoa); ViewData["ReturnUrl"] = returnUrl; return(View(pessoaEditViewModel)); }
public async Task <IActionResult> Edit(PessoaEditViewModel pessoaEditViewModel, string returnUrl = "/Manage/Index") { ViewData["ReturnUrl"] = returnUrl; // VERIFICA SE TEM USUARIO LOGADO var user = await _userManager.GetUserAsync(User); if (user == null) { throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); } // AsNoTracking() = true não vai rastrear a entidade, permitindo salvar a entidade Cliente() já rastreada Pessoa ClienteLogado = _context.Pessoas.Include(x => x.Cliente).AsNoTracking().SingleOrDefault(x => x.Cliente.Owner.Id == user.Id); var pessoa = new Pessoa(); pessoa = AutoMapper.Mapper.Map <PessoaEditViewModel, Pessoa>(pessoaEditViewModel, ClienteLogado); if (ModelState.IsValid) { try { user.Email = pessoa.Cliente.Owner.Email; user.UserName = pessoa.Cliente.Owner.Email; await _userManager.UpdateAsync(user); pessoa.Cliente.Owner = user; _context.Pessoas.Update(pessoa); _context.SaveChanges(); if (Url.IsLocalUrl(returnUrl)) { return(Redirect(returnUrl)); } } catch (DbUpdateConcurrencyException) { if (!_context.Pessoas.Any(x => x.PessoaId == pessoa.PessoaId)) { return(NotFound()); } else { throw; } } } return(View(pessoaEditViewModel)); }