protected override async Task InitializeForcefully()
        {
            var existingTables = await GetExistingTables();

            var sqlSource      = new EmbeddedResourcesSqlSource();
            var expectedTables = sqlSource.GetAvailableTableNames().ToArray();

            // drop all tables in reverse order
            foreach (var expectedTable in expectedTables.Reverse())
            {
                if (existingTables.Contains(expectedTable))
                {
                    await DropTable(expectedTable);
                }
            }

            // create all tables
            foreach (var expectedTable in expectedTables)
            {
                var query = await sqlSource.ReadSqlForTable(expectedTable);

                _ = await _connection.ExecuteAsync(
                    sql : query.InjectSchema(Schema),
                    param : _transactionProvider.Get());
            }
        }
        protected override async Task InitializeIfNeed()
        {
            var existingTables = await GetExistingTables();

            var sqlSource      = new EmbeddedResourcesSqlSource();
            var expectedTables = sqlSource.GetAvailableTableNames().ToArray();

            foreach (var expectedTable in expectedTables)
            {
                if (!existingTables.Contains(expectedTable))
                {
                    var query = await sqlSource.ReadSqlForTable(expectedTable);

                    _ = await _connection.ExecuteAsync(
                        sql : query.InjectSchema(Schema),
                        param : _transactionProvider.Get());
                }
            }
        }