public override async Task InsertAsync() { var dataSource = DataSourceFilter.Elect(new RequestContext { DataSourceChoice = DataSourceChoice.Write }); var dbSession = SessionStore.GetOrAddDbSession(dataSource); await dbSession.OpenConnectionAsync(); var conn = dbSession.Connection as NpgsqlConnection; InitColumnMappings(); var colNames = String.Join(",", ColumnMappings.Keys); var copyFromCommand = $"COPY {Table.Name} ({colNames}) FROM STDIN (FORMAT BINARY)"; using (var writer = conn.BeginBinaryImport(copyFromCommand)) { foreach (var row in Table.Rows) { writer.StartRow(); foreach (var mappingKey in ColumnMappings.Keys) { var colMapping = ColumnMappings[mappingKey]; var dbCellVal = row[colMapping.Column]; if (!String.IsNullOrEmpty(colMapping.DataTypeName)) { writer.Write(dbCellVal, colMapping.DataTypeName); } else { writer.Write(dbCellVal); } } } writer.Complete(); } }
public T ExecuteWrap <T>(Func <IDbConnectionSession, T> execute, RequestContext context, DataSourceChoice sourceChoice = DataSourceChoice.Write) { SetupRequestContext(context, sourceChoice); if (CacheManager.TryGet <T>(context, out T cachedResult)) { return(cachedResult); } return(WrapWithTransaction <T>(context, (dbSession) => { if (dbSession == null) { var dataSource = DataSourceFilter.Elect(context); dbSession = SessionStore.GetOrAddDbSession(dataSource); } try { var result = execute(dbSession); CacheManager.RequestExecuted(dbSession, context); CacheManager.TryAdd <T>(context, result); return result; } catch (Exception ex) { _logger.LogError(ex.HelpLink, ex, ex.Message); throw ex; } finally { if (dbSession.LifeCycle == DbSessionLifeCycle.Transient) { SessionStore.Dispose(); } } })); }
public async Task <T> ExecuteWrapAsync <T>(Func <IDbConnectionSession, Task <T> > execute, RequestContext context, DataSourceChoice sourceChoice = DataSourceChoice.Write) { SetupRequestContext(context, sourceChoice); if (CacheManager.TryGet <T>(context, out T cachedResult)) { return(cachedResult); } var dataSource = DataSourceFilter.Elect(context); var dbSession = SessionStore.GetOrAddDbSession(dataSource); try { var result = await execute(dbSession).ConfigureAwait(false); CacheManager.RequestExecuted(dbSession, context); CacheManager.TryAdd <T>(context, result); return(result); } catch (Exception ex) { _logger.LogError(ex.HelpLink, ex, ex.Message); throw ex; } finally { if (dbSession.LifeCycle == DbSessionLifeCycle.Transient) { SessionStore.Dispose(); } } }
public override async Task InsertAsync() { var dataSource = DataSourceFilter.Elect(new RequestContext { DataSourceChoice = DataSourceChoice.Write }); var dbSession = SessionStore.GetOrAddDbSession(dataSource); await dbSession.OpenConnectionAsync(); var conn = dbSession.Connection as MySqlConnection; MySqlBulkLoader bulkLoader = GetBulkLoader(conn); await bulkLoader.LoadAsync(); }
public override async Task InsertAsync() { var dataSource = DataSourceFilter.Elect(new RequestContext { DataSourceChoice = DataSourceChoice.Write }); var dbSession = SessionStore.GetOrAddDbSession(dataSource); await dbSession.OpenConnectionAsync(); var conn = dbSession.Connection as SqlConnection; using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(conn)) { sqlBulkCopy.DestinationTableName = Table.Name; InitColumnMappings(); var dataTable = Table.ToDataTable(ColumnMappings); await sqlBulkCopy.WriteToServerAsync(dataTable); } }