public new static bool Delete
        (
            SYS_UnidadeAdministrativa entity
            , TalkDBTransaction banco
        )
        {
            SYS_UnidadeAdministrativaDAO dal = new SYS_UnidadeAdministrativaDAO();

            if (banco == null)
            {
                dal._Banco.Open(IsolationLevel.ReadCommitted);
            }
            else
            {
                dal._Banco = banco;
            }

            try
            {
                //Verifica se a unidade administrativa pode ser deletada
                if (dal.Select_Integridade(entity.ent_id, entity.uad_id) > 0)
                {
                    throw new CoreLibrary.Validation.Exceptions.ValidationException("Não é possível excluir a unidade administrativa pois possui outros registros ligados a ela.");
                }

                //Decrementa um na integridade do endereço (se necessário)
                SYS_UnidadeAdministrativaEnderecoDAO uadendDal = new SYS_UnidadeAdministrativaEnderecoDAO {
                    _Banco = dal._Banco
                };

                SYS_UnidadeAdministrativaEndereco entityUnidadeAdministrativaEndereco = new SYS_UnidadeAdministrativaEndereco {
                    ent_id = entity.ent_id, uad_id = entity.uad_id, uae_id = uadendDal.SelectBy_ent_id_uad_id_top_one(entity.ent_id, entity.uad_id)
                };

                uadendDal.Carregar(entityUnidadeAdministrativaEndereco);

                if (entityUnidadeAdministrativaEndereco.uae_situacao != 3)
                {
                    END_EnderecoDAO endDal = new END_EnderecoDAO {
                        _Banco = dal._Banco
                    };
                    endDal.Update_DecrementaIntegridade(entityUnidadeAdministrativaEndereco.end_id);
                }

                //Decrementa um na integridade de cada tipo de contato da unidade administrativa
                SYS_UnidadeAdministrativaContatoDAO uadconDal = new SYS_UnidadeAdministrativaContatoDAO {
                    _Banco = dal._Banco
                };
                SYS_TipoMeioContatoDAO conDal = new SYS_TipoMeioContatoDAO {
                    _Banco = dal._Banco
                };

                DataTable dt = uadconDal.SelectBy_ent_id(entity.ent_id, entity.uad_id, false, 1, 1, out totalRecords);
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    conDal.Update_DecrementaIntegridade(new Guid(dt.Rows[i]["tmc_id"].ToString()));
                }

                //Decrementa um na integridade da entidade
                SYS_EntidadeDAO entDal = new SYS_EntidadeDAO {
                    _Banco = dal._Banco
                };
                entDal.Update_DecrementaIntegridade(entity.ent_id);

                //Decrementa um na integridade do tipo de unidade administrativa
                SYS_TipoUnidadeAdministrativaDAO tipoDAL = new SYS_TipoUnidadeAdministrativaDAO {
                    _Banco = dal._Banco
                };
                tipoDAL.Update_DecrementaIntegridade(entity.tua_id);

                //Decrementa um na integridade da unidade administrativa superior (se existir)
                if (entity.uad_idSuperior != Guid.Empty)
                {
                    dal.Update_DecrementaIntegridade(entity.ent_id, entity.uad_idSuperior);
                }

                //Deleta logicamente a unidade administrativa
                dal.Delete(entity);

                return(true);
            }
            catch (Exception err)
            {
                if (banco == null)
                {
                    dal._Banco.Close(err);
                }

                throw;
            }
            finally
            {
                if (banco == null)
                {
                    dal._Banco.Close();
                }
            }
        }
        /// <summary>
        /// Valida os dados da unidade administrativa de acordo com o padrão do censo escolar.
        /// </summary>
        /// <param name="entityUnidadeAdministrativa">Entidade SYS_UnidadeAdministrativa</param>
        /// <param name="entityEndereco">Entidade END_Endereco</param>
        /// <param name="entityUnidadeAdministrativaEndereco">Entidade SYS_UnidadeAdministrativaEndereco</param>
        public static void ValidaCensoEscolar(SYS_UnidadeAdministrativa entityUnidadeAdministrativa, END_Endereco entityEndereco, SYS_UnidadeAdministrativaEndereco entityUnidadeAdministrativaEndereco)
        {
            string numero      = entityUnidadeAdministrativaEndereco != null ? entityUnidadeAdministrativaEndereco.uae_numero : string.Empty;
            string complemento = entityUnidadeAdministrativaEndereco != null ? entityUnidadeAdministrativaEndereco.uae_complemento : string.Empty;

            ValidaCensoEscolar(entityUnidadeAdministrativa.uad_nome, "Unidade administrativa", entityEndereco, numero, complemento);
        }