Add GenericRepository pattern