【发布时间】:2013-10-12 17:22:10
【问题描述】:
我在导航属性方面还有另一个问题,但这次我的配置是 WCF 数据服务 + EF。
基本上元数据看起来不错,我有引用约束、关联等...我在模型中设置了 [ForeignKey] 属性。
导航属性是在客户端创建的,但是当检索数据时(使用$expand),虽然数据肯定是由服务器返回的,但集合并没有被填充:
这里的关联是在 OpenPosition 上的任务 ID 和任务上的 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 上下文)。
查看截图:
WCF:
WebAPI:
但breeze 需要一个数组,否则它只是忽略导航属性并返回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;
【问题讨论】:
-
您的客户端 EntityQuery 是什么样的?
-
当然,请参阅我的更新。就像我说的,数据是从服务器返回的。导航属性存在于 Mandate 实体上,但它保持为空,而所有其他属性都填写好了。
标签: javascript breeze