Example #1
0
        public async Task <RelationalDatabaseDataSet> GetSchemaAsync(string dataSource, string connectionString,
                                                                     CatalogName[] catalogNameCollection)
        {
            Guard.Against.NullOrEmpty(dataSource, nameof(dataSource));
            Guard.Against.NullOrEmpty(connectionString, nameof(connectionString));
            try
            {
                // simula a execução assíncrona do componente de acesso aos dados
                //
                RelationalDatabaseDataSet dataSet = await Task.Run(async() =>
                {
                    await Task.Delay(1000);
                    IRelationalDatabaseGateway gateway = _tableGatewayFactoryFunc(dataSource, connectionString);

                    RelationalDatabaseDataSet ds = new RelationalDatabaseDataSet();
                    ds.EnforceConstraints        = false;

                    _tableModule.Server.FillBy(ds, gateway);
                    _tableModule.Catalog.FillBy(ds, gateway, catalogNameCollection);
                    _tableModule.Table.FillBy(ds, gateway, catalogNameCollection);
                    _tableModule.Domain.FillBy(ds, gateway, catalogNameCollection);
                    _tableModule.Column.FillBy(ds, gateway, catalogNameCollection);

                    return(ds);
                });

                return(dataSet);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                throw;
            }
        }
Example #2
0
        public RelationalDatabaseDataSet GetSchema(string dataSource, string connectionString, CatalogName[] catalogNameCollection)
        {
            Guard.Against.NullOrEmpty(dataSource, nameof(dataSource));
            Guard.Against.NullOrEmpty(connectionString, nameof(connectionString));

            try
            {
                IRelationalDatabaseGateway gateway = _tableGatewayFactoryFunc(dataSource, connectionString);

                RelationalDatabaseDataSet dataSet = new RelationalDatabaseDataSet();
                // Activa mecanismo que suspende a validação das relações estrangeiras
                dataSet.EnforceConstraints = false;

                _tableModule.Server.FillBy(dataSet, gateway);
                _tableModule.Catalog.FillBy(dataSet, gateway, catalogNameCollection);
                _tableModule.Table.FillBy(dataSet, gateway, catalogNameCollection);
                _tableModule.Domain.FillBy(dataSet, gateway, catalogNameCollection);
                _tableModule.Column.FillBy(dataSet, gateway, catalogNameCollection);

                // Activa regras de relacionamento entre tabelas
                dataSet.EnforceConstraints = true;

                return(dataSet);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                throw;
            }
        }
Example #3
0
 public RelationalDatabaseDataSet GetCatalogs(string dataSource, string connectionString, CatalogName[] catalogNameCollection)
 {
     Guard.Against.NullOrEmpty(dataSource, nameof(dataSource));
     Guard.Against.NullOrEmpty(connectionString, nameof(connectionString));
     Guard.Against.NullOrEmptyCollection(catalogNameCollection, nameof(catalogNameCollection));
     try
     {
         IRelationalDatabaseGateway gateway = _tableGatewayFactoryFunc(dataSource, connectionString);
         return(_tableModule.Catalog.GetBy(gateway, catalogNameCollection));
     }
     catch (Exception ex)
     {
         _logger.LogError(ex.Message);
         throw;
     }
 }
Example #4
0
        public static void AddProducerRelationalDatabases(this IServiceCollection serviceCollection)
        {
            // Fachada para o padrão Table Module. Apresenta ao cliente uma interface única para acesso à lógica de negócio.
            serviceCollection.AddTransient <IRelationalDatabasesProducerService, RelationalDatabasesProducerService>();
            serviceCollection.AddTransient <IRelationalDatabasesProducerServiceAsync, RelationalDatabasesProducerService>();

            // Lógica de negócio baseado no Padrão Table Module
            serviceCollection.AddTransient <IRelationalDatabaseTableModuleService, RelationalDatabaseTableModuleService>();
            serviceCollection.AddTransient <ICatalog, Catalog>();
            serviceCollection.AddTransient <ITable, Table>();
            serviceCollection.AddTransient <IColumn, Column>();
            serviceCollection.AddTransient <IServer, Server>();
            serviceCollection.AddTransient <IDomain, Domain>();

            // Loader das gateways
            RelationalDatabaseTableGatewayLoader loader = new RelationalDatabaseTableGatewayLoader();

            loader.LoadFromRuntime();
            foreach (Type implementationType in loader.TableGateways)
            {
                serviceCollection.AddScoped(implementationType);
            }

            serviceCollection.AddSingleton <IRelationalDatabaseTableGatewayLoader>(loader);

            // Metadata das gateways
            serviceCollection.AddTransient <IRelationalDatabaseGatewayAssemblyMetadata, RelationalDatabaseGatewayAssemblyMetadata>();

            // Criação das gateways com base no atributo de metadata "Title"
            serviceCollection.AddTransient <Func <string, string, IRelationalDatabaseGateway> >(serviceProvider => (title, connectionString) =>
            {
                var gam = serviceProvider.GetService <IRelationalDatabaseGatewayAssemblyMetadata>();

                foreach (var bridge in gam.GetRuntimeMetadata())
                {
                    if (0 == String.Compare(title, bridge.Title, StringComparison.OrdinalIgnoreCase))
                    {
                        IRelationalDatabaseGateway gateway = (IRelationalDatabaseGateway)serviceProvider.GetService(Type.GetType(bridge.TypeToCreate));
                        gateway.Configure(connectionString);
                        return(gateway);
                    }
                }

                return(null);
            });
        }
Example #5
0
        public async Task <RelationalDatabaseDataSet> GetCatalogsAsync(string dataSource, string connectionString)
        {
            Guard.Against.NullOrEmpty(dataSource, nameof(dataSource));
            Guard.Against.NullOrEmpty(connectionString, nameof(connectionString));
            try
            {
                // simula a execução assíncrona do componente de acesso aos dados
                //
                RelationalDatabaseDataSet dataSet = await Task.Run(async() =>
                {
                    await Task.Delay(1);
                    IRelationalDatabaseGateway gateway = _tableGatewayFactoryFunc(dataSource, connectionString);
                    return(_tableModule.Catalog.GetAll(gateway));
                });

                return(dataSet);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                throw;
            }
        }