Jak zaktualizować jednostkę OData i zmodyfikować jej właściwości nawigacyjne w jednym żądaniu?

Usiłuję zaimplementować to, co uważałem za prosty scenariusz, korzystając z usługi OData dostarczanej przez usługi WCF Data (za pomocą aplikacji OData V3 / json; odata = pełny format ładunku). W przyszłości mogę używać formatu JSON Light) . Podstawowy scenariusz wygląda następująco:

Mam dwa podmioty:

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

Teraz chcę utworzyć prostą stronę edycji dla osoby. Ta strona edycji może zawierać dane wejściowe dla nazwy oraz dane wejściowe lub menu rozwijane dla kategorii osoby.

Scenariusz wygląda tak:

Kod pobiera osobę za pomocą $ expand dla kategorii: GET /api.svc/People(1)?$expand=CategoryUżytkownik edytuje zarówno właściwość Nazwa osoby, jak i jej kategorię.Kod strony powoduje pojedyncze żądanie zaktualizowania właściwości nazwy i kategorii danej osoby.

Kluczem jest tutaj „pojedyncze żądanie”. To jest część, dla której mam problemy ze znalezieniem dokumentacji. Widziałem przykłady, w których podzielili liczbę 3 powyżej na dwie prośby. Coś w tym stylu (nie pamiętam dokładnego formatu - nie jestem też pewien, czy trzeba usunąć łącze kategorii przed wykonaniem 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)" }

Ale słyszałem też, jak to zostało powiedziane, ale nie wykazano, że możliwe jest zaimplementowanie tej aktualizacji jako pojedynczego żądania ze zmianą właściwości nawigacji kategorii określonej w linii z innymi zmianami w elemencie Osoba. Czy ktoś mógłby mi dać przykład, jak można to zrobić? Czy możesz mi również pokazać, w jaki sposób można by to zrobić w przypadku właściwości nawigacyjnych typu „wiele do wielu”, w przeciwieństwie do opisanej powyżej opcji „jeden do wielu”.

I na koniec używam obecnie pełnego formatu JSON, V3. Czy twoje odpowiedzi na powyższe pytania będą inne, jeśli zamiast tego użyję nowego formatu światła JSON? Jeśli tak to jak?

questionAnswers(3)

yourAnswerToTheQuestion