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())); }
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); }
public async Task BulkExecute <T>(string command, IEnumerable <T> parameters, CancellationToken cancellationToken) => await _connection.BulkInsertAsync(command, parameters, _transaction, cancellationToken : cancellationToken);
/// <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)); }