I'm having yet another issues with navigation properties but this time my configuration is WCF Data Service + EF.
Basically the metadata looks good, I have the referential constraints, association, etc... I've set the [ForeignKey] attribute in the model.
The navigation property is created on the client-side, but when data is retrieved (using $expand), the collection is not filled although data is definitely returned by the server :
The association here is between mandate_id on OpenPosition and id on Mandate.
I've noticed that the Mandate entity in the OpenPositions collection contains __deferred with the uri to the entity. I had not seen that with WebApi so maybe that's the problem, or maybe it's just normal behaviour.
Is there something I'm missing ?
EDIT
The client-side query is :
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);
});
EDIT 2
The reason the navigation property is not filled is because in the case of WCF Dataservice, the navigation property is returned as an object, which contains an Array property called results.
Whereas in the case of WebAPI, the navigation property is returned as an Array.
Note that in both cases, the same data model (EF context) was used.
See screenshots:
WCF :
WebAPI:
But breeze expects an Array otherwise, it just ignores the navigation property and returns 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;