В EF у вас есть концепции отложенной загрузки и быстрой загрузки.
- Ленивая загрузка означает, что вы загружаете данные в тот момент, когда они вам нужны. Это делается с помощью вызова метода Load ().
- Стремительная загрузка означает, что вы уже знаете заранее, что вам понадобятся некоторые данные, поэтому вы загружаете их в первоначальный запрос через Включить (строка).
Al tough Include принимает строку, это не значит, что вы не можете ее расширить!
Т4 это хорошая вещь. В проекте, над которым я работал, мы создали класс EntityProperty, который содержал статические свойства для всех навигационных свойств объекта. Таким образом, вы, по крайней мере, получите ошибку компиляции, если имя свойства изменится.
Если вы действительно хотите пойти еще дальше, вы можете создать метод Include, который принимает лямбда-выражения, а затем переставить дерево выражений перед выполнением его в QueryProvider. Тогда у вас будет хорошая статическая типизация.