public override PessoaJuridica Atualizar(PessoaJuridica pessoaJuridica)
        {
            PessoaJuridica existingPessoaJuridica = Db.PessoasJuridicas.Include("ContatosCliente")
                                                    .Include("EnderecosCliente")
                                                    .Where(e => e.ClienteId == pessoaJuridica.ClienteId).FirstOrDefault <PessoaJuridica>();

            List <EnderecoCliente> deletedEnderecos = existingPessoaJuridica.EnderecosCliente.Except(pessoaJuridica.EnderecosCliente, e => e.EnderecoClienteId).ToList <EnderecoCliente>();
            List <ContatoCliente>  deletedContatos  = existingPessoaJuridica.ContatosCliente.Except(pessoaJuridica.ContatosCliente, c => c.ContatoClienteId).ToList <ContatoCliente>();

            List <EnderecoCliente> addedEnderecos = pessoaJuridica.EnderecosCliente.Except(existingPessoaJuridica.EnderecosCliente, e => e.EnderecoClienteId).ToList <EnderecoCliente>();
            List <ContatoCliente>  addedContatos  = pessoaJuridica.ContatosCliente.Except(existingPessoaJuridica.ContatosCliente, c => c.ContatoClienteId).ToList <ContatoCliente>();

            if (deletedEnderecos.Count() > 0 || deletedContatos.Count() > 0)
            {
                deletedEnderecos.ForEach(e => { existingPessoaJuridica.EnderecosCliente.Remove(e); _enderecoClienteRepositorio.Remover(e.EnderecoClienteId); });
                deletedContatos.ForEach(c => { existingPessoaJuridica.ContatosCliente.Remove(c); _contatoClienteRepositorio.Remover(c.ContatoClienteId); });
            }

            if (addedContatos.Count() > 0 || addedEnderecos.Count() > 0)
            {
                foreach (ContatoCliente c in addedContatos)
                {
                    c.ClienteId = pessoaJuridica.ClienteId;
                    if (Db.Entry(c).State == System.Data.Entity.EntityState.Detached)
                    {
                        Db.ContatosClientes.Attach(c);
                    }

                    _contatoClienteRepositorio.Adicionar(c);
                }

                foreach (EnderecoCliente e in addedEnderecos)
                {
                    e.ClienteId = pessoaJuridica.ClienteId;
                    if (Db.Entry(e).State == System.Data.Entity.EntityState.Detached)
                    {
                        Db.EnderecosClientes.Attach(e);
                    }

                    _enderecoClienteRepositorio.Adicionar(e);
                }
            }

            Db.Set <PessoaJuridica>().AddOrUpdate(pessoaJuridica);

            List <EnderecoCliente> modifiedEnderecos = pessoaJuridica.EnderecosCliente.Except(addedEnderecos, e => e.EnderecoClienteId).ToList <EnderecoCliente>();
            List <ContatoCliente>  modifiedContatos  = pessoaJuridica.ContatosCliente.Except(addedContatos, c => c.ContatoClienteId).ToList <ContatoCliente>();

            foreach (var item in modifiedEnderecos)
            {
                Db.Set <EnderecoCliente>().AddOrUpdate(item);
            }

            foreach (var item in modifiedContatos)
            {
                Db.Set <ContatoCliente>().AddOrUpdate(item);
            }

            return(existingPessoaJuridica);
        }
Esempio n. 2
0
 public void Remover(Guid id)
 {
     _contatoClienteRepositorio.Remover(id);
 }