public static void Salvar(IList <ExtratoConta> movimentacoesSalvar)
 {
     try
     {
         using (var dbContext = new TituloPublicoContext("financeDB"))
         {
             dbContext.ExtratoConta.AddRange(movimentacoesSalvar);
             dbContext.SaveChanges();
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
        public void DownloadYear(int year, string pathToSave, TipoTituloPublicoBCB tipoTituloPublico)
        {
            string fileName          = string.Empty;
            string urlFile           = string.Empty;
            string pathToSaveTratado = string.Empty;

            try
            {
                using (var dbContext = new TituloPublicoContext("financeDB"))
                {
                    if (string.IsNullOrEmpty(pathToSave))
                    {
                        throw new InvalidOperationException("In order to download files, it is necessary to setup de path");
                    }

                    pathToSaveTratado = SubstituirCamposPath(pathToSave, tipoTituloPublico, year);
                    FormatarNomeArquivoLFT(year, tipoTituloPublico, ref fileName, ref urlFile);

                    var CaminhoCompleto = string.Format(@"{0}{1}", pathToSaveTratado, fileName);
                    if (Downloader.DownloadFile(fileName, pathToSaveTratado, urlFile))
                    {
                        var dadosPlanilha   = LerDadosSyncfusion(CaminhoCompleto);
                        var cotacoesNovas   = TransformarCotacoes(dadosPlanilha);
                        var cotacoesAntigas = dbContext.CotacaoTituloPublicoTD;

                        var defaultDates = (from cotacaoNova in cotacoesNovas
                                            select new
                        {
                            CodigoTitulo = cotacaoNova.CodigoTitulo,
                            MinDataCotacao = DateTime.Today,
                            MaxDataCotacao = DateTime.Today
                        }).ToList()
                                           .Distinct();

                        var maxCotacaoTitulo = (from x in cotacoesAntigas
                                                group x by x.CodigoTitulo into y
                                                orderby y.Key
                                                select new
                        {
                            CodigoTitulo = y.Key,
                            MinDataCotacao = y.Min(z => z.DataCotacao),
                            MaxDataCotacao = y.Max(z => z.DataCotacao)
                        }).ToList()
                                               .Distinct();

                        var dicionario = maxCotacaoTitulo.ToDictionary(p => p.CodigoTitulo);

                        foreach (var umDefault in defaultDates)
                        {
                            if (!dicionario.ContainsKey(umDefault.CodigoTitulo))
                            {
                                dicionario[umDefault.CodigoTitulo] = umDefault;
                            }
                        }

                        var listaTotal = dicionario.Values.ToList();

                        var queryFiltraPendentes = (from cotacaoNova in cotacoesNovas
                                                    from maxCotacao in listaTotal
                                                    .Where(maxCot => maxCot.CodigoTitulo == cotacaoNova.CodigoTitulo && cotacaoNova.DataCotacao < maxCot.MinDataCotacao)
                                                    select cotacaoNova);

                        var registrosInserir = queryFiltraPendentes.ToList();

                        cotacoesAntigas.AddRange(registrosInserir);
                    }
                    dbContext.SaveChanges();
                }
            }
            catch (Exception ex) { throw ex; }
        }