public ContratoDeRemuneracaoBD ConverterDe(IContratoDeRemuneracao contrato)
        {
            ContratoDeRemuneracaoBD contratoConvertido = new ContratoDeRemuneracaoBD(TipoDeContratoDeRemuneracaoBancoDeDados.Padrao);

            if (!(contrato is ContratoDeRemuneracao))
            {
                throw new ArgumentException();
            }

            var contratoPadrao = contrato as ContratoDeRemuneracao;

            contratoConvertido.Id      = contrato.Id;
            contratoConvertido.Nome    = contrato.NomePrincipal;
            contratoConvertido.Deleted = contrato.Deleted;
            if (contrato.Favorecimento != null)
            {
                contratoConvertido.Favorecimento = TipoDeFavorecimentoBD.Get(contrato.Favorecimento.Tipo.Id).ConverteDe(contrato.Favorecimento, contrato.Id, Definicoes.ID_VINCULO_FAVORECIMENTO_CONTRATO);
            }

            if (contrato.Regras != null)
            {
                contratoConvertido.Regras = contrato.Regras.Select(reg => TipoDeRegraBD.Get(reg.Tipo.Id).ConverteDe(reg));
            }

            contratoConvertido.Vigencia = contratoPadrao.Vigencia;



            return(contratoConvertido);
        }
        public async Task InserirFavorecimentoEm(IFavorecimento favorecimento, int idVinculo, string tipoDeVinculo)
        {
            TipoDeFavorecimentoBD tipoBD = TipoDeFavorecimentoBD.Get(favorecimento.Tipo.Id);

            FavorecimentoBD favorecimentoBD = tipoBD.ConverteDe(favorecimento, idVinculo, tipoDeVinculo);

            //DbContextOptions<RemuneracaoContext> option = Helper.ObtemOpcoesDeConexao<RemuneracaoContext>(_stringDeConexao);

            //using (var context = new RemuneracaoContext(option))
            //{
            using (var context = _fabricaDeContextos.CriaContextoDe <RemuneracaoContext>(TipoDeConexao.Remuneracao))
            {
                var contemFavorecidoNaBase = await(from fav in context.Favorecimentos
                                                   where fav.IdVinculo == idVinculo &&
                                                   fav.tipo == tipoBD.Id &&
                                                   fav.tipoVinculo == tipoDeVinculo
                                                   select fav).FirstOrDefaultAsync();

                if (contemFavorecidoNaBase == null)
                {
                    await context.Favorecimentos.AddAsync(favorecimentoBD);

                    await context.SaveChangesAsync();
                }
                else
                {
                    var parametros = favorecimentoBD.ParametrosEspecificos;
                    favorecimentoBD = context.Favorecimentos.First(p => p.Id == contemFavorecidoNaBase.Id);
                    //favorecimentoBD.Id = favorecimentosBD.Id;
                    //FavorecimentoBD fav = context.Favorecimentos.First(p => p.Id == favorecimentoBD.Id);

                    favorecimentoBD.ParametrosEspecificos = parametros;

                    context.Favorecimentos.Update(favorecimentoBD);
                    await context.SaveChangesAsync();
                }
            }
        }