refactoring DAL using a generic repository pattern