partial void Deletetb_Estabelecimento(tb_Estabelecimento instance);
 partial void Inserttb_Estabelecimento(tb_Estabelecimento instance);
 partial void Updatetb_Estabelecimento(tb_Estabelecimento instance);
        public DtoEnderecoEstabelecimento cadastrarEstabelecimento(DtoEnderecoEstabelecimento enderecoEstabelecimento)
        {
            DBCatalogDataContext dataContext = new DBCatalogDataContext();
            var estabelecimentoBanco = new tb_Estabelecimento();
            var ultimoEstabelecimentoSalvo = new tb_Estabelecimento();

            var enderecoEstabelecimentoBanco = dataContext.tb_EnderecoEstabelecimentos.FirstOrDefault(u =>
                u.rua ==  enderecoEstabelecimento.rua &&
                u.numero ==  enderecoEstabelecimento.numero);

            var estabBanco = dataContext.tb_Estabelecimentos.FirstOrDefault(u => u.estabelecimento == enderecoEstabelecimento.estabelecimento.nome);

            if (enderecoEstabelecimentoBanco == null && estabBanco == null)
            {
                enderecoEstabelecimentoBanco = new tb_EnderecoEstabelecimento();
                estabelecimentoBanco.estabelecimento = enderecoEstabelecimento.estabelecimento.nome;
                dataContext.tb_Estabelecimentos.InsertOnSubmit(estabelecimentoBanco);
                dataContext.SubmitChanges();

                ultimoEstabelecimentoSalvo = (from ues in dataContext.tb_Estabelecimentos orderby ues.id descending select ues).First();

                enderecoEstabelecimentoBanco.idEstabelecimento = ultimoEstabelecimentoSalvo.id;
                enderecoEstabelecimentoBanco.rua = enderecoEstabelecimento.rua;
                enderecoEstabelecimentoBanco.cidade = enderecoEstabelecimento.cidade;
                enderecoEstabelecimentoBanco.estado = enderecoEstabelecimento.estado;
                enderecoEstabelecimentoBanco.numero = enderecoEstabelecimento.numero;
                enderecoEstabelecimentoBanco.cep = enderecoEstabelecimento.cep;
                enderecoEstabelecimentoBanco.latitude = enderecoEstabelecimento.latitude;
                enderecoEstabelecimentoBanco.longitude = enderecoEstabelecimento.longitude;

                dataContext.tb_EnderecoEstabelecimentos.InsertOnSubmit(enderecoEstabelecimentoBanco);
                dataContext.SubmitChanges();
            }
            else if (enderecoEstabelecimentoBanco == null && estabBanco != null)
            {
                enderecoEstabelecimentoBanco = new tb_EnderecoEstabelecimento();
                enderecoEstabelecimentoBanco.idEstabelecimento = estabBanco.id;
                enderecoEstabelecimentoBanco.rua = enderecoEstabelecimento.rua;
                enderecoEstabelecimentoBanco.cidade = enderecoEstabelecimento.cidade;
                enderecoEstabelecimentoBanco.estado = enderecoEstabelecimento.estado;
                enderecoEstabelecimentoBanco.numero = enderecoEstabelecimento.numero;
                enderecoEstabelecimentoBanco.cep = enderecoEstabelecimento.cep;
                enderecoEstabelecimentoBanco.latitude = enderecoEstabelecimento.latitude;
                enderecoEstabelecimentoBanco.longitude = enderecoEstabelecimento.longitude;

                dataContext.tb_EnderecoEstabelecimentos.InsertOnSubmit(enderecoEstabelecimentoBanco);
                dataContext.SubmitChanges();
            }
            else
            {
                throw new DtoExcecao(DTO.Enum.CampoInvalido, "Estabelecimento ja existente");
            }

            var estabelecimentoRetorno = new DtoEnderecoEstabelecimento();
            estabelecimentoRetorno.cep = enderecoEstabelecimento.cep;
            estabelecimentoRetorno.cidade = enderecoEstabelecimento.cidade;
            estabelecimentoRetorno.estado = enderecoEstabelecimento.estado;
            estabelecimentoRetorno.idEstabelecimento = ultimoEstabelecimentoSalvo.id;
            estabelecimentoRetorno.latitude = enderecoEstabelecimento.latitude;
            estabelecimentoRetorno.longitude = enderecoEstabelecimento.longitude;
            estabelecimentoRetorno.numero = enderecoEstabelecimento.numero;
            estabelecimentoRetorno.rua = enderecoEstabelecimento.rua;

            return estabelecimentoRetorno;
        }