Como posso recursivamente incluir todas as propriedades navegáveis ​​para emular Lazy Loading

Para emular Lazy Loading, eu gostaria de ter um método que inclua recursivamente o gráfico de objeto completo via Eager Loading para que, ao carregar a entidade, todos os seus dados relacionados também sejam carregados.

Da documentação do MSDN:

Para incluir uma única referência: query.Include (e => e.Level1Reference).Para incluir uma única coleção: query.Include (e => e.Level1Collection).Para incluir uma referência e, em seguida, uma referência um nível abaixo: query.Include (e => e.Level1Reference.Level2Reference).Para incluir uma referência e, em seguida, uma coleção um nível abaixo: query.Include (e => e.Level1Reference.Level2Collection).Para incluir uma coleção e, em seguida, uma referência um nível abaixo: query.Include (e => e.Level1Collection.Select (l1 => l1.Level2Reference)).Para incluir uma coleção e, em seguida, uma coleção um nível abaixo: query.Include (e => e.Level1Collection.Select (l1 => l1.Level2Collection)).Para incluir uma coleção e, em seguida, uma referência um nível abaixo: query.Include (e => e.Level1Collection.Select (l1 => l1.Level2Reference)).Para incluir uma coleção e, em seguida, uma coleção um nível abaixo: query.Include (e => e.Level1Collection.Select (l1 => l1.Level2Collection)).Para incluir uma coleção, uma referência e uma referência dois níveis abaixo: query.Include (e => e.Level1Collection.Select (l1 => l1.Level2Reference.Level3Reference)).Para incluir uma coleção, uma coleção e uma referência dois níveis abaixo: query.Include (e => e.Level1Collection.Select (l1 => l1.Level2Collection.Select (l2 => l2.Level3Reference))).

Questão:

Como posso recursivamente incluir todas as propriedades navegáveis ​​e construir isso em um método de repositório genérico para que eu possa obter um gráfico de objeto profundo de uma entidade sempre que necessário, independentemente se novas propriedades foram adicionadas?

questionAnswers(2)

yourAnswerToTheQuestion