moving most of GenericEntityCollection's functionality into the abstract class