【发布时间】:2014-12-11 03:43:57
【问题描述】:
这是 Ziad 在 2013 年 11 月 13 日提出的问题的后续。他的问题是在 BreezeJS 中添加扩展子句后 EntityAspect 属性不再可用。此功能似乎在 V1.4.3 中有效,但在使用 EF6 和 WebApi2 升级到 V1.4.5 后,此功能不再可用。我们现在有一个 V1.5、EF 6.1.1 和 WebApi 2.2 的 Breeze 客户端,但功能仍然没有恢复。我的问题是:是否会恢复此功能,如果没有,是否有可用的解决方法。除非我能找到解决这个问题的方法,否则我有一个基于 Breeze、Knockout、Durandal 的主要应用程序,它实际上已经死在水中了。
我窃取了 Ziad 示例代码。我希望他不介意,因为它清楚地说明了问题。 此代码工作正常:
var query = breeze.EntityQuery.from("Products").take(1);
该行的 EntityAspect 属性可用。
但是,当他添加了一个扩展子句时:
var query = breeze.EntityQuery.from("Products").expand("Orders").take(1);
这是 Ziad 用于检索数据的代码:
var mgr = new breeze.EntityManager(rootUrl + 'breeze/ProductsApi');
mgr.executeQuery(query, function (data) {
alert(data.results[0].entityAspect); // undefined.
});
该行的 EntityAspect 属性现在未定义,检索到的字段显示为纯值而不是 KnockoutJS 类型的 observables。
我能够解决检索到的字段显示为纯文本的问题。我相信这是因为我使用了 ko.observableArray 而不是 ko.observable。但是 EntityAspect 不能处理扩展结构的问题是一个大问题。我无法让我的 UI 和我的底层 Breeze 缓存保持同步。我的 SaveChanges 功能似乎确实可以可靠地工作。试图完成这项工作只会产生数小时的挫败感。
我即将离开这个 Breeze/Knockout 项目,或者返回使用 Durandal、Odata 和 Knockout 的项目版本。当我使用 Odata 时,该项目有效。保存结构所需的开销很复杂,但它确实有效。如果无法在整个扩展结构中使用 EntityAspect,则使用 Breeze/Knockout 似乎是一个不可用的选项。
值得注意的是,我使用的是 Visual Studio 2013。VS 2013 的 Intellisense 表明 EntityAspect 功能可用。但是,当我运行该应用程序时,该功能根本不存在。
如果有人能帮我解决这个问题,我将不胜感激,三周的沮丧终于结束了。
不幸的是,Ziad 上次在 2013 年 11 月提出这个问题时没有得到任何答案。希望我能走运。我不敢相信 EntityAspect 的这个问题不会影响 Breeze/Knockout 编程社区中的大量用户。
【问题讨论】:
-
我们确实检查了 Breeze 版本 1.4.11,即使我们在查询中使用 EXPAND,entityaspect 也能正常工作。现在,我可以确认,在指定 EXPAND 时,版本 1.5.0 中的相同查询根本不会返回 enttyAspect。
-
您是否将 [queryable] 属性添加到您的控制器或
Products等控制器方法? -
嗨,我们确实在 Metadata() 上尝试了 [EnableQuery],并确保元数据正常。现在,当使用查询扩展功能时,我们没有返回任何 entityAspect……再一次,我们在使用 Breeze 1.4.11 时没有遇到问题!您能否提一些建议。提前致谢。
标签: javascript knockout.js entity-framework-6 breeze