Obtendo entidades relacionadas O ASP.NET WebApi OData v4 resulta em "Nenhum recurso HTTP encontrado que corresponda ao URI da solicitação"

eu seguieste tutorial asp.net por Mike Wassone consegui configurar as entidades relacionadas muito bem, mas quando apliquei essa lógica ao meu projeto, as relações de entidade mais complexas (na medida em que existem mais; essa é a única diferença) não teriam êxito em uma chamada OData, eu obteve um 404 com esta carga útil:

{
  "error": {
    "code": "",
    "message": "No HTTP resource was found that matches the request URI 'http://localhost:19215/Menus(c94f7f98-6987-e411-8119-984be10349a2)/MenuPermissions'.",
    "innererror": {
      "message": "No routing convention was found to select an action for the OData path with template '~/entityset/key/unresolved'.",
      "type": "",
      "stacktrace": ""
    }
  }
}

O tutorial não menciona a necessidade de configurar as navegações do EdmModel e Mike Wasson faz questão de ressaltar que "asp.net é a documentação oficial :-)"; então, passei um tempo tentando fazer com que essas entidades relacionadas funcionassem, pensando que havia configurado o projeto incorretamente.

Eu pensei que poderia ter algo a ver com a versão das bibliotecas ASP.NET OData que o NuGet estava instalando (o NuGet Console instala 6.9.x, enquanto o NuGet Dialog instala o 6.5.x). Também me perguntei se era porque configurei o projeto como um projeto completamente vazio e depois usei o OWIN, então tentei com uma solução de modelo puro do ASP.NET. Eu também tentei algumas outras soluções possíveis: atributos de rota OData nos métodos do meu controlador; e incluindo minha camada de dados e modelos na mesma biblioteca (eu os separo para manter SECO); Eu até tentei usaro depurador de rotas WebApi de Rick Anderson - Eu não tentaria usar isso de novo!

Tudo em vão.

Houve um breve momento em que eles trabalharam, mas não sei por que; eles deixaram de trabalhar na próxima build / run - acho que mudei algo no meio, mas era muito menor e eu estava perdendo a confiança a cada passo.

Decidi que Mike Wasson deveria ter seguido o caminho de menor resistência em seu tutorial e, então, voltei aesta pergunta / resposta SO e modificado para uso com ODataConventionModelBuilder e reutilização, como explicarei na minha resposta abaixo.

Se alguém souber de uma maneira mais simples de fazer isso funcionar, entre em contato, caso contrário, recomendo apenas dar uma olhada e escrever essas EdmModel-Navigations na minha resposta abaixo.

questionAnswers(2)

yourAnswerToTheQuestion