Exemplo n.º 1
0
 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();
     }
 }
Exemplo n.º 2
0
 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();
             }
         }
     }));
 }
Exemplo n.º 3
0
        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();
                }
            }
        }
Exemplo n.º 4
0
        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();
        }
Exemplo n.º 5
0
        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);
            }
        }