Пример #1
0
        public void SeSolicitarDuasVezesOMesmoDicionarioDeveTrazerAMesmaInstancia()
        {
            var dicionario = DicionarioCache.Consultar(typeof(ObjetoDeTestes));

            DicionarioCache.Consultar(typeof(ObjetoDeTestes))
            .Should().Be(dicionario);
        }
        public void AdicionarRegistro <TObjeto>(TObjeto registro) where TObjeto : IEntidade
        {
            var tipo       = typeof(TObjeto);
            var dicionario = DicionarioCache.Consultar(tipo);
            var tabela     = ConsultarTabelaDoBancoDeDadosVirtual(tipo);

            AdicionarRegistro(dicionario, tabela, registro);
        }
Пример #3
0
        private object CriarNovoRepositorio <TObjeto>() where TObjeto : class, IEntidade
        {
            var tipoRepositorio = typeof(Repositorio <>);
            var tipoGenerico    = tipoRepositorio.MakeGenericType(typeof(TObjeto));
            var dicionario      = DicionarioCache.Consultar(typeof(TObjeto));
            var persistencia    = new Persistencia <TObjeto>(dicionario);

            return((IRepositorio)Activator.CreateInstance(tipoGenerico, this, persistencia));
        }
        private void CriarNovoRepositorio <TObjeto>(string tipo) where TObjeto : IEntidade
        {
            var tipoRepositorio = typeof(RepositorioFake <>);
            var tipoGenerico    = tipoRepositorio.MakeGenericType(typeof(TObjeto));
            var dicionario      = DicionarioCache.Consultar(typeof(TObjeto));
            var persistencia    = new PersistenciaFake <TObjeto>(dicionario);

            Repositorios.Add(tipo, (IRepositorio)Activator.CreateInstance(tipoGenerico, this, persistencia));
            _persistencias.Add(tipo, persistencia);
        }
        private void AdicionarRegistros(Type tipo, IEnumerable registros, Action <object> atualizar = null)
        {
            var dicionario = DicionarioCache.Consultar(tipo);
            var tabela     = ConsultarTabelaDoBancoDeDadosVirtual(tipo);

            foreach (var registro in registros)
            {
                atualizar?.Invoke(registro);
                AdicionarRegistro(dicionario, tabela, registro);
            }
        }
Пример #6
0
        private object CriarNovoRepositorio(Type tipo)
        {
            var tipoRepositorio      = typeof(Repositorio <>);
            var repositorioGenerico  = tipoRepositorio.MakeGenericType(tipo);
            var tipoPersistencia     = typeof(Persistencia <>);
            var persistenciaGenerica = tipoPersistencia.MakeGenericType(tipo);
            var dicionario           = DicionarioCache.Consultar(tipo);
            var persistencia         = Activator.CreateInstance(persistenciaGenerica, dicionario);

            return(Activator.CreateInstance(repositorioGenerico, this, persistencia));
        }
Пример #7
0
        private void CriarNovoRepositorio(string nome, Type tipo)
        {
            var tipoRepositorio      = typeof(Repositorio <>);
            var repositorioGenerico  = tipoRepositorio.MakeGenericType(tipo);
            var tipoPersistencia     = typeof(Persistencia <>);
            var persistenciaGenerica = tipoPersistencia.MakeGenericType(tipo);
            var dicionario           = DicionarioCache.Consultar(tipo);
            var persistencia         = Activator.CreateInstance(persistenciaGenerica, dicionario);
            var repositorio          = Activator.CreateInstance(repositorioGenerico, this, persistencia);

            Repositorios.Add(nome, repositorio);
        }
        public DataTable ConsultarTabelaDoBancoDeDadosVirtual(Type tipo, string nomeTabela = null)
        {
            var dicionario = DicionarioCache.Consultar(tipo);
            var nome       = nomeTabela ?? dicionario.Nome;

            if (!BancoDeDadosVirtual.Tables.Contains(nome))
            {
                var tabela = DataTableBuilder.CriarDataTable(dicionario);
                tabela.TableName = nome;
                BancoDeDadosVirtual.Tables.Add(tabela);
            }
            return(BancoDeDadosVirtual.Tables[nome]);
        }
Пример #9
0
        private void CriarNovoRepositorio(Type tipo)
        {
            var tipoRepositorio      = typeof(RepositorioFake <>);
            var repositorioGenerico  = tipoRepositorio.MakeGenericType(tipo);
            var tipoPersistencia     = typeof(PersistenciaFake <>);
            var persistenciaGenerica = tipoPersistencia.MakeGenericType(tipo);
            var dicionario           = DicionarioCache.Consultar(tipo);
            var tabela       = ConsultarTabelaDoBancoDeDadosVirtual(tipo);
            var persistencia = Activator.CreateInstance(persistenciaGenerica, dicionario);
            var repositorio  = Activator.CreateInstance(repositorioGenerico, this, persistencia, tabela);

            Repositorios.Add(tipo, repositorio);
        }
Пример #10
0
        public IBuscador <TObjeto> Buscar <TObjeto>() where TObjeto : IEntidade
        {
            var buscador = (_buscador as IBuscador <TObjeto>);

            if (buscador != null)
            {
                return(buscador);
            }
            var dicionario = DicionarioCache.Consultar(typeof(TObjeto));

            buscador  = new Buscador <TObjeto>(Comando, dicionario, QueryBuilder, RelacionamentoBuilder);
            _buscador = buscador;
            return(buscador);
        }
        private bool AsPropriedadesEstaoRelacionadas()
        {
            var campo = PropriedadeDoCampo.PropertyType;
            var model = PropriedadeDoModel.PropertyType;

            if (campo.IsGenericType && model.IsGenericType)
            {
                if ((campo.GetGenericTypeDefinition() != typeof(ICollection <>)) ||
                    (model.GetGenericTypeDefinition() != typeof(ICollection <>)))
                {
                    return(false);
                }
                var dicionarioMapeado = DicionarioCache.Consultar(model.GetGenericArguments()[0]);
                return(dicionarioMapeado.OrigemMapa == campo.GetGenericArguments()[0]);
            }
            return(campo == model);
        }
Пример #12
0
        public void SeSolicitar100000VezesParalelasOMesmoDicionarioDeveSerOMesmo()
        {
            Dicionario dicionario = null;
            var        vezes      = 1;

            Parallel.For(1, 100000,
                         n =>
            {
                if (dicionario == null)
                {
                    dicionario = DicionarioCache.Consultar(typeof(ObjetoDeTestes));
                }
                DicionarioCache.Consultar(typeof(ObjetoDeTestes)).Should().Be(dicionario);
                lock (MeuLock)
                    vezes++;
            });
            vezes.Should().Be(100000);
        }
Пример #13
0
        private void CriarNovoRepositorio(string nome, Type tipo)
        {
            var tipoRepositorio      = typeof(RepositorioFake <>);
            var repositorioGenerico  = tipoRepositorio.MakeGenericType(tipo);
            var tipoPersistencia     = typeof(PersistenciaFake <>);
            var persistenciaGenerica = tipoPersistencia.MakeGenericType(tipo);
            var dicionario           = DicionarioCache.Consultar(tipo);
            var tabela = BancoDeDadosVirtual.Tables[tipo.Name]
                         ?? DataTableBuilder.CriarDataTable(dicionario);

            if (!BancoDeDadosVirtual.Tables.Contains(tabela.TableName))
            {
                BancoDeDadosVirtual.Tables.Add(tabela);
            }
            var persistencia = Activator.CreateInstance(persistenciaGenerica, dicionario);
            var repositorio  = Activator.CreateInstance(repositorioGenerico, this, persistencia, tabela);

            Repositorios.Add(nome, repositorio);
        }
        private static Relacionamento GerarScriptCarregamentoDescendente(PropertyInfo propriedade, string chaveEstrangeiraDaPropriedadeInversa, Type tipoPropriedade)
        {
            var tipo = propriedade.PropertyType;

            if ((!tipo.IsGenericType) || (tipo.GetGenericTypeDefinition() != typeof(ICollection <>)))
            {
                return(null);
            }
            var tipoGenerico = tipo.GetGenericArguments()[0];
            var dicionarioTipoPropriedade = DicionarioCache.Consultar(tipoPropriedade.GetGenericArguments()[0]);

            if ((dicionarioTipoPropriedade.OrigemMapa != null) && (tipoGenerico == dicionarioTipoPropriedade.OrigemMapa))
            {
                tipoGenerico = dicionarioTipoPropriedade.Tipo;
            }
            var dicionario = DicionarioCache.Consultar(tipoGenerico);

            return(new Relacionamento(TiposRelacionamento.Descendente, dicionario, chaveEstrangeiraDaPropriedadeInversa));
        }
Пример #15
0
        public static string ConsultarForeignKeyDaInverseProperty(PropertyInfo propriedade, Type tipo)
        {
            if ((!tipo.IsGenericType) || (tipo.GetGenericTypeDefinition() != typeof(ICollection <>)))
            {
                return(null);
            }
            var atributo = AttributeHelper.Consultar <PropriedadeDeLigacaoEstrangeiraAttribute>(propriedade);

            if (atributo == null)
            {
                var dicionario = DicionarioCache.Consultar(propriedade.DeclaringType);
                if (dicionario.OrigemMapa == null)
                {
                    return(null);
                }
                var item = dicionario.ConsultarPorPropriedade(propriedade.Name);
                if (item.Ligacao != null)
                {
                    return(string.Join(";", item.Ligacao.ChaveEstrangeira));
                }
            }
            if (atributo == null)
            {
                return(null);
            }
            var tipoGenerico = tipo.GetGenericArguments()[0];
            var dicionarioTipoPropriedade = DicionarioCache.Consultar(tipoGenerico);

            if (dicionarioTipoPropriedade.OrigemMapa != null)
            {
                tipoGenerico = dicionarioTipoPropriedade.OrigemMapa;
            }
            var foreign = tipoGenerico.GetProperty(atributo.Nome);

            if (foreign == null)
            {
                return(null);
            }
            return(ConsultarForeignKey(foreign));
        }
        private static Relacionamento CriarLigacaoAscendenteEntreModels(PropertyInfo propriedade, string chaveEstrangeira)
        {
            var dicionario = DicionarioCache.Consultar(propriedade.PropertyType);

            return(new Relacionamento(TiposRelacionamento.Ascendente, dicionario, chaveEstrangeira));
        }