public void RealizarMigracao()
        {
            List <ForecastET> forecasts = new List <ForecastET>();

            List <ForecastET> forecastsPorAno = new List <ForecastET>();
            var connectionStringEacesso       = _connectionStrings.Value.EacessoConnection;

            using (IDbConnection dbConnection = new SqlConnection(connectionStringEacesso))
            {
                dbConnection.Open();

                var listaAno = ObterEfaturamentoAnos(dbConnection);

                listaAno.ForEach(ano =>
                {
                    var efaturamentoAgrupadoDtoLista = ObterEfaturamentoAgrupadoDto(dbConnection, ano).ToList();

                    foreach (var efaturamentoAgrupadoDto in efaturamentoAgrupadoDtoLista)
                    {
                        List <EfaturamentoAgrupadoDto> efaturamentoAgrupadoDtoGrupoLista = new List <EfaturamentoAgrupadoDto>();
                        try
                        {
                            var efaturamentoAgrupadoDtoGrupoExiste = forecastsPorAno.Any(e =>

                                                                                         e.IdCelula == efaturamentoAgrupadoDto.IdCelula &&
                                                                                         e.IdCliente == efaturamentoAgrupadoDto.IdCliente &&
                                                                                         e.IdServico == efaturamentoAgrupadoDto.IdServico &&
                                                                                         e.NrAno == ano
                                                                                         );

                            if (!efaturamentoAgrupadoDtoGrupoExiste)
                            {
                                efaturamentoAgrupadoDtoGrupoLista = efaturamentoAgrupadoDtoLista.FindAll(e =>

                                                                                                         e.IdCelula == efaturamentoAgrupadoDto.IdCelula &&
                                                                                                         e.IdCliente == efaturamentoAgrupadoDto.IdCliente &&
                                                                                                         e.IdServico == efaturamentoAgrupadoDto.IdServico &&
                                                                                                         e.Ano == ano
                                                                                                         );

                                if (efaturamentoAgrupadoDtoGrupoLista != null && efaturamentoAgrupadoDtoGrupoLista.Count > 0)
                                {
                                    var efaturamentoAgrupadoDtoGrupo = new EfaturamentoAgrupadoDto
                                    {
                                        IdCelula                        = efaturamentoAgrupadoDtoGrupoLista.First().IdCelula,
                                        IdCliente                       = efaturamentoAgrupadoDtoGrupoLista.First().IdCliente,
                                        IdServico                       = efaturamentoAgrupadoDtoGrupoLista.First().IdServico,
                                        Ano                             = efaturamentoAgrupadoDtoGrupoLista.First().Ano,
                                        ValorRecorrente                 = efaturamentoAgrupadoDtoGrupoLista.Sum(x => x.ValorRecorrente),
                                        ValorRecorrenteNao              = efaturamentoAgrupadoDtoGrupoLista.Sum(x => x.ValorRecorrenteNao),
                                        ValorRecorrenteNovasVendas      = efaturamentoAgrupadoDtoGrupoLista.Sum(x => x.ValorRecorrenteNovasVendas),
                                        ValorRecorrentePerdas           = efaturamentoAgrupadoDtoGrupoLista.Sum(x => x.ValorRecorrentePerdas),
                                        ValorRecorrenteMultas           = efaturamentoAgrupadoDtoGrupoLista.Sum(x => x.ValorRecorrenteMultas),
                                        ValorRecorrenteRepactuacao      = efaturamentoAgrupadoDtoGrupoLista.Sum(x => x.ValorRecorrenteRepactuacao),
                                        ValorRecorrenteRepactuacaoRetro = efaturamentoAgrupadoDtoGrupoLista.Sum(x => x.ValorRecorrenteRepactuacaoRetro),
                                    };

                                    var forecastET = new ForecastET
                                    {
                                        IdCelula               = efaturamentoAgrupadoDtoGrupo.IdCelula,
                                        IdCliente              = efaturamentoAgrupadoDtoGrupo.IdCliente,
                                        IdServico              = efaturamentoAgrupadoDtoGrupo.IdServico,
                                        NrAno                  = efaturamentoAgrupadoDtoGrupo.Ano,
                                        DataAplicacaoReajuste  = ObterDataAplicacaoReajuste(dbConnection, efaturamentoAgrupadoDtoGrupo.IdCelula, efaturamentoAgrupadoDtoGrupo.IdCliente, efaturamentoAgrupadoDtoGrupo.IdServico, ano),
                                        DataReajusteRetroativo = ObterDataReajusteRetroativo(dbConnection, efaturamentoAgrupadoDtoGrupo.IdCelula, efaturamentoAgrupadoDtoGrupo.IdCliente, efaturamentoAgrupadoDtoGrupo.IdServico, ano),
                                        //IdStatus = 0, //TODO EM BRANCO
                                        Usuario       = "Eacesso",
                                        DataAlteracao = DateTime.Now,
                                        //DescricaoJustificativa = "Teste de migração",
                                        ValorForecast = new ValorForecast
                                        {
                                            VlPercentual   = ObterValorPercentual(efaturamentoAgrupadoDtoGrupo),
                                            ValorJaneiro   = ObterValoreMes(ano, 1, efaturamentoAgrupadoDtoLista, efaturamentoAgrupadoDto),
                                            ValorFevereiro = ObterValoreMes(ano, 2, efaturamentoAgrupadoDtoLista, efaturamentoAgrupadoDto),
                                            ValorMarco     = ObterValoreMes(ano, 3, efaturamentoAgrupadoDtoLista, efaturamentoAgrupadoDto),
                                            ValorAbril     = ObterValoreMes(ano, 4, efaturamentoAgrupadoDtoLista, efaturamentoAgrupadoDto),
                                            ValorMaio      = ObterValoreMes(ano, 5, efaturamentoAgrupadoDtoLista, efaturamentoAgrupadoDto),
                                            ValorJunho     = ObterValoreMes(ano, 6, efaturamentoAgrupadoDtoLista, efaturamentoAgrupadoDto),
                                            ValorJulho     = ObterValoreMes(ano, 7, efaturamentoAgrupadoDtoLista, efaturamentoAgrupadoDto),
                                            ValorAgosto    = ObterValoreMes(ano, 8, efaturamentoAgrupadoDtoLista, efaturamentoAgrupadoDto),
                                            ValorSetembro  = ObterValoreMes(ano, 9, efaturamentoAgrupadoDtoLista, efaturamentoAgrupadoDto),
                                            ValorOutubro   = ObterValoreMes(ano, 10, efaturamentoAgrupadoDtoLista, efaturamentoAgrupadoDto),
                                            ValorNovembro  = ObterValoreMes(ano, 11, efaturamentoAgrupadoDtoLista, efaturamentoAgrupadoDto),
                                            ValorDezembro  = ObterValoreMes(ano, 12, efaturamentoAgrupadoDtoLista, efaturamentoAgrupadoDto),
                                            Usuario        = "Eacesso",
                                            DataAlteracao  = DateTime.Now
                                        }
                                    };
                                    adicionarValorTotal(forecastET);
                                    //TODO Data de Aniversário para vir em branco
                                    //forecastET.DataAniversario = ObterDataAniversario(forecastET);

                                    forecastsPorAno.Add(forecastET);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            var erroMsg = "IdCelula:" + efaturamentoAgrupadoDtoGrupoLista.First().IdCelula.ToString() + " IdCliente: " + efaturamentoAgrupadoDtoGrupoLista.First().IdCliente.ToString() + " IdServico:" + efaturamentoAgrupadoDtoGrupoLista.First().IdServico.ToString();
                            AdicionarLogGenerico(ex, "Erro ao migrar dados FORECAST ano:" + ano.ToString(), erroMsg);
                            continue;
                        }
                    }

                    _forecastRepository.AdicionarRange(forecastsPorAno);
                    _unitOfWork.Commit();

                    forecastsPorAno = new List <ForecastET>();
                });
                dbConnection.Close();
            }
        }