I fully agree with all points from @CodeNotFound answer. But there is one case (not with your sample) where it's not a matter of preference, but a must choosing one of them - unidirectional relatioships, i.e. when navigation property exists only in one of the relationships ends.
In such case, since EF6 Has
methods require navigation property expression while With
methods have overloads with and without navigation property, you are forced to start configuration from the entity with navigation property (in contrast, EF Core have no such requirements, so there it's really a matter of preference).
So in case you don't have collection navigation property, the only choice is:
modelBuilder.Entity<Player>()
.HasRequired(p => p.CurrentTeam)
.WithMany() // <--
.HasForeignKey(p => p.CurrentTeamId)
.WillCascadeOnDelete(false);
and if you don't have reference navigation property, respectively:
modelBuilder.Entity<Team>()
.HasMany(t => t.Players)
.WithRequired() // <--
.HasForeignKey(p => p.CurrentTeamId)
.WillCascadeOnDelete(false);
Note that it's crucial to use the correct With
overload. For instance, if you do have navigation property and you don't specify it, EF will map it to another unidirectional relationship with conventionally named FK shadow property.