public void BulkInsert__DataOfCustomTypePassed__MappedToTableAndInserted(bool async)
        {
            Name.Gender ConvertGender(bool boolean) => boolean ? Name.Gender.Male : Name.Gender.Female;

            // Arrange
            List <User> data = new Faker <User>()
                               .RuleFor(u => u.Gender, (f, u) => f.Random.Bool())
                               .RuleFor(u => u.FirstName, (f, u) => f.Name.FirstName(ConvertGender(u.Gender)))
                               .RuleFor(u => u.LastName, (f, u) => f.Name.FirstName(ConvertGender(u.Gender)))
                               .RuleFor(u => u.Age, (f, u) => f.Random.Number(18, 99))
                               .Generate(1000);

            // Act
            if (async)
            {
                _connection.BulkInsertAsync(data, commandTimeout: 10).GetAwaiter().GetResult();
            }
            else
            {
                _connection.BulkInsert(data, commandTimeout: 10);
            }

            List <User> inserted = _connection.Query <User>("SELECT * FROM [User]").ToList();

            // Assert
            Assert.IsTrue(inserted.All(u => u.Id != 0));
            Assert.IsTrue(data.SequenceEqual(inserted, new UserComparer()));
        }
예제 #2
0
        public async Task Store(Subscription subscription, CancellationToken cancellationToken)
        {
            var entity = new
            {
                Active = true,
                subscription.SubscriptionId,
                subscription.Trigger,
                subscription.InitialRecordTime,
                subscription.ReportIfEmpty,
                subscription.Schedule?.Second,
                subscription.Schedule?.Hour,
                subscription.Schedule?.Minute,
                subscription.Schedule?.Month,
                subscription.Schedule?.DayOfMonth,
                subscription.Schedule?.DayOfWeek,
                subscription.Destination,
                subscription.QueryName
            };

            var entityId = await _connection.ExecuteScalarAsync <int>(new CommandDefinition(SubscriptionRequests.Store, entity, cancellationToken : cancellationToken));

            var parameters   = subscription.Parameters.Select(parameter => new { SubscriptionId = entityId, parameter.Name }).ToArray();
            var parameterIds = (await _connection.BulkInsertReturningAsync(SubscriptionRequests.StoreParameter, parameters, cancellationToken: cancellationToken)).ToArray();
            var values       = subscription.Parameters.SelectMany((p, i) => p.Values.Select(value => new { ParameterId = parameterIds[i], Value = value })).ToArray();

            await _connection.BulkInsertAsync(SubscriptionRequests.StoreParameterValue, values, cancellationToken : cancellationToken);
        }
예제 #3
0
 public async Task BulkExecute <T>(string command, IEnumerable <T> parameters, CancellationToken cancellationToken) => await _connection.BulkInsertAsync(command, parameters, _transaction, cancellationToken : cancellationToken);
예제 #4
0
 /// <summary>
 /// Efficiently inserts multiple rows, in batches as necessary.
 /// </summary>
 public static Task <int> BulkInsertAsync <TInsert>(this IDbConnection connection, string sql, IEnumerable <TInsert> insertParams, IDbTransaction transaction = null, int?batchSize = null, CancellationToken cancellationToken = default(CancellationToken))
 {
     return(connection.BulkInsertAsync(sql, (object)null, insertParams, transaction, batchSize, cancellationToken));
 }