public static async Task BulkInsertAsync <TEntity>(this DbContext context, IEnumerable <TEntity> items, Action <BulkOptionsBuilder> bulkOptions = null, CancellationToken token = default(CancellationToken)) { GetBulkInfrstructure <TEntity>(context, out var sp, out var entity, out var relationalConnection); IDbContextTransaction target = null; if (relationalConnection.CurrentTransaction == null) { target = await relationalConnection.BeginTransactionAsync(token); } using (var transaction = target.NullDisposable()) { var builder = new BulkOptionsBuilder(); bulkOptions?.Invoke(builder); var options = builder.Options; var insertProcessor = new InsertBulkProcessor <TEntity>(new EntityMetadataColumnSetupProvider(entity, EntityState.Added, options), options.GetSqlBulkOptions(EntityState.Added), options.Setup); await insertProcessor.ProcessAsync(relationalConnection, items, token); transaction.Target?.Commit(); } }