breezejs: właściwość nawigacji jest tworzona, ale nie jest wypełniona danymi
Mam jeszcze inne problemy z właściwościami nawigacji, ale tym razem moja konfiguracja to usługa danych WCF + EF.
Zasadniczo metadane wyglądają dobrze, mam ograniczenia referencyjne, skojarzenia itd ... Ustawiłem atrybut [ForeignKey] w modelu.
Właściwość nawigacyjna jest tworzona po stronie klienta, ale po pobraniu danych (za pomocą $ expand) kolekcja nie jest wypełniana, chociaż serwer zdecydowanie zwraca dane:
Powiązanie tutaj znajduje się między mandate_id w OpenPosition a id on Mandate.
Zauważyłem, że jednostka Mandate w kolekcji OpenPositions zawiera __deferred z uri do jednostki. Nie widziałem tego w WebApi, więc może to jest problem, a może po prostu normalne zachowanie.
Czy czegoś brakuje?
EDYTOWAĆ
Zapytanie po stronie klienta to:
var query = breeze.EntityQuery.from("Mandates").inlineCount().expand("OpenPositions");
return manager.executeQuery(query.using(service)).then(function (result) {
logger.info(result);
}).fail(function (error) {
logger.error(error);
});
EDYCJA 2
Powodem, dla którego właściwość nawigacji nie jest wypełniona, jest to, że w przypadku usługi WCF Dataservice właściwość nawigacji jest zwracana jako obiekt, który zawiera właściwość Array zwaną wynikami.
Podczas gdy w przypadku WebAPI, właściwość nawigacji jest zwracana jako tablica.
Należy zauważyć, że w obu przypadkach użyto tego samego modelu danych (kontekst EF).
Zobacz zdjęcia:
WCF:
WebAPI:
Ale wiatr oczekuje, że Array jest inaczej, po prostu ignoruje właściwość nawigacji i zwraca wartość null:
// needed if what is returned is not an array and we expect one - this happens with __deferred in OData.
if (!Array.isArray(relatedRawEntities)) return null;