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; } }
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; } }
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; } }
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); }); }
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; } }