public IActionResult Put(int id, [FromBody] FavorecidoDTO dto)
        {
            if (id != dto.Id)
            {
                return(new StatusCodeResult(StatusCodes.Status400BadRequest));
            }
            if (ModelState.IsValid)
            {
                Favorecido favorecido = _context.Favorecido.Include(q => q.Familia).ThenInclude(q => q.Endereco).SingleOrDefault(q => q.CodFavorecido == id);
                if (favorecido == null)
                {
                    return(new BadRequestResult());
                }


                favorecido.Nome           = dto.Nome;
                favorecido.Cpf            = dto.Cpf;
                favorecido.Rg             = dto.Rg;
                favorecido.Sexo           = dto.Sexo;
                favorecido.DataNascimento = dto.DataNascimento;
                favorecido.Apelido        = dto.Apelido;

                if (dto.NomeFamilia != null)
                {
                    if (favorecido.Familia == null)
                    {
                        favorecido.Familia          = new Familia();
                        favorecido.Familia.Endereco = new Endereco();
                    }


                    favorecido.Familia.Nome     = dto.NomeFamilia;
                    favorecido.Familia.Celular  = dto.Celular;
                    favorecido.Familia.Email    = dto.Email;
                    favorecido.Familia.Telefone = dto.Telefone;

                    if (favorecido.Familia.Endereco == null)
                    {
                        favorecido.Familia.Endereco = new Endereco();
                    }

                    favorecido.Familia.Endereco.Bairro      = dto.Bairro == null ? " " : dto.Bairro;
                    favorecido.Familia.Endereco.Cep         = dto.Cep == null ? " " : dto.Cep;
                    favorecido.Familia.Endereco.Cidade      = dto.Cidade == null ? " " : dto.Cidade;
                    favorecido.Familia.Endereco.Complemento = dto.Complemento == null ? " " : dto.Complemento;
                    favorecido.Familia.Endereco.Estado      = dto.Estado == null ? " " : dto.Estado;
                    favorecido.Familia.Endereco.Logradouro  = dto.Logradouro == null ? " " : dto.Logradouro;
                    favorecido.Familia.Endereco.Numero      = dto.Numero == null ? " " : dto.Numero;
                }

                _context.ConhecimentoProficional.Where(q => q.CodFavorecido == id).Load();

                if (favorecido.ConhecimentosProfissionais == null)
                {
                    favorecido.ConhecimentosProfissionais = new List <ConhecimentoProficional>();
                }

                if (dto.ConhecimentosProfissionais == null)
                {
                    dto.ConhecimentosProfissionais = new List <ConhecimentoProficionalDTO>();
                }

                var entraram = dto.ConhecimentosProfissionais.Where(q => !favorecido.ConhecimentosProfissionais.Any(x => x.Nome == q.Text));
                var sairam   = favorecido.ConhecimentosProfissionais.Where(q => !dto.ConhecimentosProfissionais.Any(x => x.Text == q.Nome)).ToArray();

                foreach (var entrou in entraram)
                {
                    ConhecimentoProficional cp = new ConhecimentoProficional()
                    {
                        Nome = entrou.Text, CodFavorecido = favorecido.CodFavorecido
                    };
                    _context.ConhecimentoProficional.Add(cp);
                    favorecido.ConhecimentosProfissionais.Add(cp);
                }
                foreach (var saiu in sairam)
                {
                    favorecido.ConhecimentosProfissionais.Remove(saiu);
                    _context.ConhecimentoProficional.Remove(saiu);
                }



                try
                {
                    _context.SaveChanges();
                }
                catch (Exception e)
                {
                    if (e.InnerException.Message.Contains("Cpf"))
                    {
                        ModelState.AddModelError("Cpf", "Este CPF ja está cadastrado");
                    }
                    return(new BadRequestObjectResult(ModelState));
                }



                return(new ObjectResult(dto));
            }
            else
            {
                return(new BadRequestObjectResult(ModelState));
            }
        }
        public async Task <IActionResult> Post([FromBody] FavorecidoDTO v)
        {
            if (ModelState.IsValid)
            {
                Usuario user = await _userManager.GetUserAsync(HttpContext.User);

                Favorecido favorecido = new Favorecido
                {
                    Nome           = v.Nome,
                    Apelido        = v.Apelido,
                    Cpf            = v.Cpf,
                    Rg             = v.Rg,
                    Sexo           = v.Sexo,
                    DataNascimento = v.DataNascimento,
                    DataDeCadastro = DateTime.Today,
                    IdUsuario      = user.Id,
                };

                if (v.NomeFamilia != null)
                {
                    favorecido.Familia = new Familia()
                    {
                        Nome     = v.NomeFamilia,
                        Celular  = v.Celular,
                        Email    = v.Email,
                        Telefone = v.Telefone
                    };
                    favorecido.Familia.Endereco = new Endereco()
                    {
                        Bairro      = v.Bairro == null?"": v.Bairro,
                        Cep         = v.Cep == null ? "" : v.Cep,
                        Cidade      = v.Cidade == null ? "" : v.Cidade,
                        Complemento = v.Complemento == null ? "" : v.Complemento,
                        Estado      = v.Estado == null ? "" : v.Estado,
                        Logradouro  = v.Logradouro == null ? "" : v.Logradouro,
                        Numero      = v.Numero == null ? "" : v.Numero
                    };
                }

                if (v.ConhecimentosProfissionais != null)
                {
                    favorecido.ConhecimentosProfissionais = new List <ConhecimentoProficional>();
                    foreach (var cp in v.ConhecimentosProfissionais)
                    {
                        ConhecimentoProficional conhecimento = new ConhecimentoProficional()
                        {
                            Favorecido = favorecido,
                            Nome       = cp.Text
                        };
                        favorecido.ConhecimentosProfissionais.Add(conhecimento);
                        _context.ConhecimentoProficional.Add(conhecimento);
                    }
                }



                _context.Favorecido.Add(favorecido);
                try
                {
                    _context.SaveChanges();
                    v.Id = favorecido.CodFavorecido;
                }
                catch (Exception e)
                {
                    if (e.InnerException.Message.Contains("Cpf"))
                    {
                        ModelState.AddModelError("Cpf", "Este CPF ja está cadastrado");
                    }
                    return(new BadRequestObjectResult(ModelState));
                }

                return(new ObjectResult(v));
            }
            else
            {
                return(new BadRequestObjectResult(ModelState));
            }
        }