In EF you have the concepts of Lazy loading and Eager loading.
- Lazy loading means you load the data the moment you need it. This is done trough the Load() method call.
- Eager loading means you already know upfront that you will need some data so you load it in the initial query trough Include(string).
Al tough Include takes a string this doesn't mean you can't extend this!
T4 is a nice thing. In a project I've worked on we created an EntityProperty class that contained static properties for all the Navigational properties on an entity. This way you would at least get a compile error if a property name changes.
If you really want to go one step further you could build a Include method that takes a Lambda and then rearrange the Expression tree before executing it to the QueryProvider. Then you would have nice static typing.