public static bool Excluir(T1 registro) { bool ret = true; if (ret) { ret = ValidarExclusao(registro); } if (ret) { try { DBControl.BeginTrans(); if (registro is HasAutoRemove) { List <ReferenceExpression> listAR = ((HasAutoRemove)registro).GetAutoRemoveCollection(); foreach (ReferenceExpression ar in listAR) { Type clazz = ar.Clazz; Type customListType = typeof(List <>).MakeGenericType(clazz); IList list = (IList)Activator.CreateInstance(customListType); if (ar.Id != 0) { list = Pesquisar(ar.Id); } else { list = InvokePesquisar(clazz, ar.Expression); } if (list != null && list.Count > 0) { foreach (var item in list) { Type clazzMI = typeof(DBControl.Table <>).MakeGenericType(clazz); var parameterTypes = new object[] { typeof(int) }; MethodInfo mi = clazzMI.GetMethods().FirstOrDefault(m => m.Name == "Excluir" && m.GetParameters().Select(p => p.ParameterType).SequenceEqual(parameterTypes)); object[] parameters = new object[] { ((IdentityColumn)item).Id }; ret = (bool)mi.Invoke(null, parameters); if (!ret) { break; } } } } } if (ret) { var lista = BaseDados.DataBase.GetCollection <T1>(CollectionName()); ret = lista.Delete(((IdentityColumn)registro).Id); } if (ret) { DBControl.Commit(); } else { DBControl.Rollback(); } } catch (Exception ex) { ret = false; DBControl.Rollback(); Mensagem.ShowErro("Erro ao excluir registro de " + ClassName() + "!", ex); } } return(ret); }
private bool GravarAvaliacao() { bool ret = false; DBControl.BeginTrans(); try { avaliacao = new Avaliacao(); string codigo = GetCodigoAvaliacao(); string strSeq = ""; List <Avaliacao> avaliacoes = DBControl.Table <Avaliacao> .Pesquisar(x => x.Codigo.StartsWith(codigo)); if (avaliacoes != null && avaliacoes.Count > 0) { strSeq = avaliacoes[avaliacoes.Count - 1].Codigo.Substring(codigo.Length); } int seq = 1; if (!strSeq.Equals("")) { seq = int.Parse(strSeq); seq++; } codigo = codigo + seq.ToString("000"); StringBuilder sb = new StringBuilder(); sb.Append("Avaliação "); sb.Append(tipoAvaliacao); sb.Append(" "); sb.Append(disciplina.Nome); sb.Append(" sequência "); sb.Append(seq.ToString("000")); avaliacao.Codigo = codigo; avaliacao.Descricao = sb.ToString(); avaliacao.DtGeracao = dtGeracao; avaliacao.IdDisciplina = parametersGA.IdDisciplina; avaliacao.QtdQuestoes = parametersGA.QtdQuestoes; int idAvaliacao = DBControl.Table <Avaliacao> .Incluir(avaliacao); ret = idAvaliacao > 0; if (ret) { AvaliacaoQuestao aq; int id; foreach (int idQuestao in questoes) { aq = new AvaliacaoQuestao(); aq.IdAvaliacao = idAvaliacao; aq.DtGeracao = dtGeracao; aq.IdQuestao = idQuestao; id = DBControl.Table <AvaliacaoQuestao> .Incluir(aq); ret = id > 0; if (!ret) { break; } } } if (ret) { DBControl.Commit(); } else { DBControl.Rollback(); } } catch (Exception ex) { Mensagem.ShowErro("Erro na inclusão da Avaliação!", ex); DBControl.Rollback(); } return(ret); }