Implement the generic repo and uow, including extension methods and refactors