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();
            }
        }