Decoupled command builders and database providers from strong typing around connection and transaction. By that, those classes are more focused on handling the specifics of the database instead of mixing command setup with execution,
I placed the execution code in the command builders extension methods. Added extensions for each of the database providers to keep the strongly typed API so no one accidentally won't inject wrong connection or transaction type,
applied changes to migratory and database,
kept the option of still setting up NpgsqlConnection without the NpgsqlDataSource to ease the migration.
See also https://github.com/npgsql/npgsql/issues/5485.