Нужно было использовать ORM - это уже и Generic Repository и Unit Of Work.
Например Entity Framework. Используя EF Code First и разные Entity Configurations (в общем случае достаточно одних), можно легко решить вашу задачу переключения между БД, меняя строку подключения и DB-провайдер.
И не будет проблем с JOIN.
Не нравится EF - используйте Dapper.net, легкая и быстрая ORM, на ней целый stackoverflow работает