Como faço para atualizar uma entidade OData e modificar suas propriedades de navegação em uma solicitação?

Eu estou tentando implementar o que eu pensei que era um cenário simples usando um serviço OData fornecido pelo WCF Data Services (usando o aplicativo OData V3 / json; odata = formato de payload detalhado, por enquanto. Eu posso usar o formato JSON Light no futuro) . O cenário básico é assim:

Eu tenho duas entidades:

class Person 
{ 
  public int ID { get; set; }
  public string Name { get; set; } 
  public virtual PersonCategory Category { get; set; }
}

class PersonCategory
{
  public int ID { get; set; }
  public string Description { get; set; }
  public virtual ICollection<Person> People { get; set; }
}

Agora, quero criar uma página de edição simples para uma pessoa. Esta página de edição pode ter uma entrada para o Nome e uma entrada ou lista suspensa para a Categoria da Pessoa.

Então, o cenário vai:

O código faz o download da pessoa usando $ expand para a categoria: GET /api.svc/People(1)?$expand=CategoryO usuário edita a propriedade Nome da pessoa e sua categoria.O código da página faz uma única solicitação para atualizar as propriedades Nome e Categoria dessa pessoa.

A chave aqui está em "uma única solicitação". Esta é a parte em que estou tendo problemas para encontrar documentação. Eu vi exemplos onde eles dividiram o número 3 acima em duas solicitações. Algo parecido com isso (não me lembro do formato exato - também não tenho certeza se você teria que excluir o link Categoria antes de fazer o PUT):

PATCH /api.svc/People(1) with content: {"Name": "new name" }
PUT /api.svc/People(1)/$links/Category with content: { "url": "/api.svc/Categories(2)" }

Mas também ouvi dizer, mas não demonstrei, que é possível implementar essa atualização como uma solicitação única com a alteração na propriedade de navegação Category especificada em linha com as outras alterações na entidade Person. Alguém poderia me dar um exemplo de como isso pode ser feito? Além disso, você pode me mostrar como isso seria feito com uma propriedade de navegação muitos-para-muitos, ao contrário do one-to-many que descrevi acima.

E, finalmente, estou usando o formato JSON detalhado, V3. Suas respostas para as perguntas acima seriam diferentes se eu usasse o novo formato de luz JSON? Se sim, como?

questionAnswers(3)

yourAnswerToTheQuestion