public PostgreSQLEventStoreMigration(
            ILogger <PostgreSQLEventStoreMigration> logger,
            DbUpMigration.Factory factory,
            IClaptrapIdentity identity,
            IDbFactory dbFactory,
            IStorageMigrationContainer storageMigrationContainer,
            IPostgreSQLEventStoreOptions options)
        {
            var(connectionName, schemaName, eventTableName) =
                options.RelationalEventStoreLocator.GetNames(identity);
            var migrationOptions = new DbUpMigrationOptions(
                new[] { Assembly.GetExecutingAssembly() },
                fileName => fileName.EndsWith("-event.sql"),
                new Dictionary <string, string>
            {
                { "SchemaName", schemaName },
                { "EventTableName", eventTableName }
            },
                () =>
                (DeployChanges
                 .To.PostgresqlDatabase(dbFactory.GetConnectionString(connectionName)), null));

            var migration    = factory.Invoke(logger, migrationOptions);
            var migrationKey =
                $"{nameof(PostgreSQLEventStoreMigration)}_{connectionName}_{schemaName}_{eventTableName}";

            _migrationTask = storageMigrationContainer.CreateTask(migrationKey, migration);
        }
        public PostgreSQLEventEntitySaver(
            ChannelBatchOperator <EventEntity> .Factory batchOperatorFactory,
            IMasterOrSelfIdentity identity,
            IDbFactory dbFactory,
            IPostgreSQLEventStoreOptions options,
            IBatchOperatorContainer batchOperatorContainer)
        {
            _dbFactory = dbFactory;
            var(connectionName, schemaName, eventTableName) =
                options.RelationalEventStoreLocator.GetNames(identity.Identity);
            _connectionName = connectionName;
            _schemaName     = schemaName;
            _eventTableName = eventTableName;
            var operatorKey = new BatchOperatorKey()
                              .With(nameof(PostgreSQLEventEntitySaver))
                              .With(_connectionName)
                              .With(_schemaName)
                              .With(_eventTableName);

            _batchOperator = (IBatchOperator <EventEntity>)batchOperatorContainer.GetOrAdd(
                operatorKey, () => batchOperatorFactory.Invoke(
                    new BatchOperatorOptions <EventEntity>(options)
            {
                DoManyFunc     = (entities, cacheData) => SaveManyAsync(entities),
                DoManyFuncName = $"event batch saver for {operatorKey.AsStringKey()}"
            }));
        }