javascript - 将扩展子句添加到 BreezeJS 查询后,EntityAspect 属性仍然无效

标签 javascript knockout.js entity-framework-6 breeze

这是 Ziad 于 2013 年 11 月 13 日提出的问题的后续。他的问题是关于在 BreezeJS 中添加扩展子句后 EntityAspect 属性不再可用。看起来这个功能在 V1.4.3 中有效,但在使用 EF6 和 WebApi2 升级到 V1.4.5 后,此功能不再可用。我们现在有V1.5、EF 6.1.1和WebApi 2.2的Breeze Client,功能还没有恢复。我的问题是:此功能是否会恢复,如果不会,是否有可用的解决方法。除非我能找到解决这个问题的方法,否则我有一个主要的基于 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 类型的可观察对象。

我能够解决检索字段显示为纯文本的问题。我相信这是因为我使用了 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 Web API documentation 中所述,您不能在 Controller 中使用 Web API [EnableQuery][Queryable] 属性。

[EnableQuery]/[Queryable] 属性更改 Json.net 序列化配置,这样 Breeze 客户端就无法识别包含的实体的类型。因此,它将扩展节点中的 JSON 数据视为普通旧 JavaScript 对象,而不是具有 entityAspect 属性的实体。

[BreezeQueryable] 属性保留了基本的序列化配置。

[BreezeQueryable] 应用于您的 Web API Controller 查询方法。

关于javascript - 将扩展子句添加到 BreezeJS 查询后,EntityAspect 属性仍然无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26393143/

相关文章:

javascript - 数字旁边的正则表达式替换

jquery - JavaScript "Expected ' ]'"

javascript - 从 KnockoutJS 中动态生成的输入中获取值

javascript - 基于 ID Knockoutjs 的两个下拉选项绑定(bind)

c# - 使用 GraphDiff 更新多对多关联

javascript - 有什么方法可以用变量的新值动态地重新加载 SASS 吗?

javascript - 在没有 coffeescript 的 rails 3.2 中使用 javascript

javascript - 如何在 Canvas 上绘制大量点(具有规则图案)?

.net - 面向 .NET 4.6.x 的 ASP.NET Core 1.0.1 应用程序

mysql - 文件未找到异常 : The file "MySql.Data.resources" could not be found