/// <summary> /// Inicia um novo escopo de execução ou participa de um existente /// </summary> /// <param name="nomeConfigConexao">Nome da conexao em connectionSettings</param> /// <param name="opcaoTransacao">Opcao da transacao. Se for <see cref="OpcaoTransacao.Requerido"/> /// e ja existir um escopo, um novo escopo é criado de forma transparente</param> public Escopo(string nomeConfigConexao, OpcaoTransacao opcaoTransacao) { if (!OpcaoTransacaoRequerNovoEscopo(opcaoTransacao)) InicializarEscopo(OpcaoEscopo.Requerido, nomeConfigConexao, opcaoTransacao); else // Se precisar mudo o comportamento padrão de inicializacao InicializarEscopo(OpcaoEscopo.RequerNovo, nomeConfigConexao, opcaoTransacao); }
/// <summary> /// Inicia um novo escopo de execução ou participa de um existente /// </summary> /// <param name="opcaoTransacao">Opcao da transacao. Se for <see cref="OpcaoTransacao.Requerido"/> /// e ja existir um escopo, um novo escopo é criado de forma transparente</param> public Escopo(OpcaoTransacao opcaoTransacao) : this(ContextoAcessoDado.NOME_CONEXAO_GERAL, opcaoTransacao) { }
/// <summary> /// Identifica se com a <paramref name="opcaoTransacao"/> informado um novo escopo deve ser criado /// para delimitar a vida util da transacao. /// </summary> /// <remarks> /// Se <see cref="OpcaoTransacao.Requerido"/> for informado e <see cref="Escopo.Atual"/> nao possuir /// uma transacao então um novo escopo deve ser criado para que ao fim dele o commit ou rollback ocorra. /// </remarks> /// <param name="opcaoTransacao"></param> /// <returns></returns> private bool OpcaoTransacaoRequerNovoEscopo(OpcaoTransacao opcaoTransacao) { // Se nao existir nenhum atualmente entao nao preciso fazer nada de diferente // na inicializacao if (Escopo.Atual == null) return false; else return opcaoTransacao == OpcaoTransacao.Requerido && Escopo.Atual.ContextoAcessoDado.Transaction == null; }
private void InicializarEscopo(OpcaoEscopo opcaoEscopo, string nomeConfigConexao, OpcaoTransacao opcaoTransacao) { // nos precisamos mudar _Atual? bool precisaMudarEscopo; VerificarMudancaEscopo(opcaoEscopo, nomeConfigConexao, out precisaMudarEscopo); //this.InicializarEscopo(opcaoEscopo, ); if (precisaMudarEscopo) { // Inicializando apenas se um novo escopo vai ser criado _ContextoAcessoDado = new ContextoAcessoDado(nomeConfigConexao); _ContextoAutenticacao = new ContextoAutenticacao(); AtribuirEscopoAtual(); // Uma transacao nunca é iniciada em um escopo que nao inciou transacional ConfigurarTransacao(opcaoTransacao); } }
/// <summary> /// Inicializa propriedade <see cref="Acontep.Dado.ContextoAcessoDado.Transaction"/> /// </summary> /// <param name="opcaoTransacao"></param> private void ConfigurarTransacao(OpcaoTransacao opcaoTransacao) { if (opcaoTransacao == OpcaoTransacao.Requerido) { // Assume que se chegou aqui nao existe transacao ContextoAcessoDado.Transaction = ContextoAcessoDado.Connection.BeginTransaction(); } }
/// <summary> /// Inicia um novo escopo de execução ou participa de um existente /// </summary> /// <exception cref="InvalidOperationException"><see cref="OpcaoTransacao.Requerido"/> exige <see cref="OpcaoEscopo.Requerido"/></exception> /// se um escopo ja existir sem uma transação ativa /// <param name="opcaoEscopo">Configura a forma como esse escopo vai participar de um ja existente</param> /// <param name="nomeConfigConexao">Nome da configuração de conexao em connectionStrings do arquivo de configuracao da aplicacao</param> /// <param name="opcaoTransacao">Configura a forma como esse escopo vai participar de uma transação</param> public Escopo(OpcaoEscopo opcaoEscopo, string nomeConfigConexao, OpcaoTransacao opcaoTransacao) { // Se o usuario informou explicitamente opcoes de escopo e de transacao provoca erro if (OpcaoTransacaoRequerNovoEscopo(opcaoTransacao) && opcaoEscopo == OpcaoEscopo.Requerido) throw new InvalidOperationException("Erro Transação Requer Novo Escopo"); InicializarEscopo(opcaoEscopo, nomeConfigConexao, opcaoTransacao); }