Auto-relacionamento com Entity Framework

No Entity Framework, além das relações comuns (1:1, 1:N e N:M), também tem a possibilidade de fazer auto-relacionamento na tabela, por exemplo, um menu e um sub-menu, dados contidos tudo na tabela de menu, e o Entity Framework trabalhando com essas informações e dando ao usuário um experiência simples para sua utilização.
Vamos exemplificar um modelo bem básico para tal finalidade de auto-relacionamento:
Tabela:
Na tabela menu, como exemplo na figura abaixo, tem um auto-relacionamento entre Id e MenuId, que no momento da gravação se não for passado o valor para MenuId(porque o mesmo pode conter valor null) é o item primário, e se for passado é o item da relação, ou seja, o SubMenu.

Como transferir esse modelo para o Entity Framework?
É muito simples fazer esse modelo funcionar com Entity Framework, segue modelos e configurações para que possam reproduzir esse modelo:
Classes
1-Menu
Nessa classe já tem a informação do auto-relacionamento na coleção de SubMenu (ICollection<Menu>) sendo essa responsável em receber os Menu que não tem valor null no campo MenuId.
2-Context
Na classe de configuração é bem simples, no método OnModelCreating foi configurado a entidade Menu da seguinte forma:
O ponto principal é configurar a propriedade SubMenu que é uma coleção de Menu e sua configuração é Opcional (WithOptional), depois configurar também a chave que é a relação, no caso em si MenuId, pronto com essas configurações é só cadastrar os menus principais e seus sub-menus de acordo com o relacionamento, exemplo:
Inserir menu e sub-menu
Resultado em tabela banco de dados

Nesses dados o Id de número 2 faz relação com o Id de número 1, ou seja, o auto-relacionamento, mas, como recuperar essas informações pelo Entity Framework?
Muito simples, exemplo:
O resultado abaixo mostra que o menu Computador tem o sub-menu X-Turbo, ou seja, a recuperação dos itens da relação e consequentemente o auto-relacionamento.


As outras operações de alteração e exclusão são do mesmo jeito que alterar qualquer entidade no ORM Entity Framework, mas, queria deixar claro que podemos fazer auto-relacionamento, de maneira clara e objetiva.
Referencias:
