¿Cómo actualizo una entidad OData y modifico sus propiedades de navegación en una solicitud?

Estoy tratando de implementar lo que pensé que era un escenario simple usando un servicio OData proporcionado por los servicios de datos WCF (usando la aplicación OData V3 / json; odata = formato de carga útil detallada, por ahora. Puedo usar el formato JSON Light en el futuro) . El escenario básico es el siguiente:

Tengo dos 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; }
}

Ahora, quiero crear una página de edición simple para una persona. Esta página de edición puede tener una entrada para el Nombre y una entrada o un menú desplegable para la Categoría de la persona.

Así, el escenario va:

El código descarga a la Persona que usa $ expand para la Categoría: GET /api.svc/Personas(1)?$expand=CategoryEl usuario edita tanto la propiedad Nombre de la persona como su categoría.El código de la página realiza una única solicitud para actualizar las propiedades de Nombre y Categoría de esa persona.

La clave aquí está en "una sola solicitud". Esta es la parte para la que tengo problemas para encontrar documentación. He visto ejemplos donde dividen el número 3 anterior en dos solicitudes. Algo como esto (no recuerdo el formato exacto; tampoco estoy seguro de si tendría que BORRAR el enlace de la Categoría antes de hacer el 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)" }

Pero, también escuché que se dijo, pero no se demostró, que es posible implementar esta actualización como una solicitud única con el cambio a la propiedad de navegación de Categoría especificada en línea con los otros cambios a la entidad Persona. ¿Podría alguien darme un ejemplo de cómo podría hacerse esto? Además, ¿puede mostrarme cómo se haría con una propiedad de navegación de muchos a muchos, a diferencia de la de uno a muchos que he descrito anteriormente?

Y, finalmente, actualmente estoy usando el formato JSON detallado, V3. ¿Serían diferentes sus respuestas a las preguntas anteriores si en cambio usara el nuevo formato de luz JSON? ¿Si es así, cómo?

Respuestas a la pregunta(3)

Su respuesta a la pregunta