コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }