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?