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:

Fulvio C Canducci Dias

Written by

Bacharel em Sistemas de Informação, MTAC (Multi-Plataform Technical Audience Contributor-Microsoft) e Developer Web

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade