The biggest advantage for using the Fluent API is when you need to customize something. In your example you have a one to many relationship between school and students. Your navigation properties describe that relationship exactly because you have a List on the School class and you have a School property on the Student.
Where the Fluent API becomes really helpful is if for some reason you want to keep that relationship but for some reason you don't want the navigation property to Students on the school:
public class School
{
public School()
{
Students = new List<Student>();
}
public Guid Id { get; set; }
public string Name { get; set; }
// remove List<Student>
}
You can still describe this relationship using the Fluent API:
modelBuilder.Entity<Student>()
.HasRequired(req => req.School)
.WithMany() // no navigation property
.HasForeignKey(fk => fk.SchoolId);
It is also useful in scenarios where you don't want to map the foreign key in the model itself. If you want to be able to override certain conventions of Entity Framework, sometimes the Fluent API is the only way to do that.