我在导航属性方面还有另一个问题,但这次我的配置是 WCF 数据服务 + EF。
基本上元数据看起来不错,我有引用约束、关联等...我在模型中设置了 [ForeignKey] 属性。
导航属性是在客户端创建的,但是当检索数据时(使用 $expand),虽然数据肯定是由服务器返回的,但不会填充集合:
这里的关联是在 OpenPosition 上的 task_id 和 Mandate 上的 id 之间。
我注意到 OpenPositions 集合中的 Mandate 实体包含 __deferred 以及实体的 uri。我没有在 WebApi 中看到这一点,所以也许这就是问题所在,或者这只是正常行为。
有什么我想念的吗?
编辑
客户端查询是:
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);
});
编辑 2
未填充导航属性的原因是,在 WCF Dataservice 的情况下,导航属性作为对象返回,该对象包含一个名为 results 的 Array 属性。
而在 WebAPI 的情况下,导航属性作为数组返回。
请注意,在这两种情况下,都使用了相同的数据模型(EF 上下文)。
见截图:
周转基金:
网络接口:
但是微风需要一个数组,否则它只是忽略导航属性并返回 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;