I think you are thinking to complex. What you have here are all related entities. These are all in the same layer and have all the same intention: handling of data.
Think about the usage of the Layer Supertype Pattern from Martin Fowler. It says:
It's not uncommon for all the objects in a layer to have methods you don't want to have duplicated throughout the system. You can move all of this behavior into a common Layer Supertype.
There you should have for example a EntityBase class. A abstract class that handles all the common things like ID, Validation, comparision.
Each of your items are entities and should have a own repository. If you do not want that a specified repository has posibility for write actions, you could split your IRepository interface into two parts: IReadOnlyRepository and IRepository.
For your example:
You can have multiple leagues, a league has multiple teams and a team can have only 1 league?!?. Each team has multiple players, and they can only be part of one team. Nevertheless. It all depends on the informations you want to reuse. But for a good DB Design you should have each of this entities as own aggregates.