odata - 调用 FetchEntityByKey 的 Breeze/OData 确实使用过滤器(未使用 EntitySetController.GetEntityByKey)

标签 odata breeze

将 Breeze 与 OData 结合使用并调用 entityManager.FetchEntityByKey() 时,会发送以下请求:

/odata/Customers?$filter=Id eq 2

我早就料到了

/odata/Customers(2)

是否可以使用后者制作 Breeze?

2013 年 12 月 10 日更新:

是的!我发现我可以执行以下操作(恕我直言,FetchEntityByKey 应该这样做):

entityManager.executeQuery('Cusotmer(2)') ...

然后发出以下请求:

/odata/Customers(2)

但是!现在看来 Breeze (v1.9.6) 无法正确处理结果。返回结果数组为空。实际上它应该只返回一个项目(实体)而不是一个数组。

UserVoice 链接

我创建了一个 UserVoice feedback

最佳答案

你真的关心 Breeze 生成的 url 是 /odata/Customers(2) 还是 /odata/Customers?$filter=Id eq 2 ?为什么?

它们都是合法的 OData。 OData 服务器会很乐意为您提供对任一查询的正确答案。

Breeze 确实更喜欢后者。原因如下。

Customers(2) 语法返回一个对象或 null(不是 404-unfound)。

Customers?$filter=Id eq 2 过滤器语法总是返回一个数组。该数组有一项或零项。但是你会得到一个数组。

我们在客户端的一个简化是查询总是返回一个 data.results 数组。我们有一个查询结果 API,无论您如何查询,data.results 始终是一个数组。您不必为 null 测试 data.results。而且您不必记住“我的查询返回的是对象还是数组?

这是我们的指导性客户端一致性原则。我们不太可能偏离这一原则。

碰巧,您可以拦截 URL 生成并根据需要更改它。那是给你的练习。当然(正如您发现的那样)您必须做一些工作才能将结果转回数组。忽略去做是我怀疑您试图将 Breeze 引入其他语法 Customers(2) 导致令人困惑的空数组结果的原因。

除非有令人信服的理由支持,否则我们不太可能更改默认行为。

关于odata - 调用 FetchEntityByKey 的 Breeze/OData 确实使用过滤器(未使用 EntitySetController.GetEntityByKey),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20440358/

相关文章:

c# - 从 WCF 数据服务客户端获取单个记录的最佳实践

c# - 在 Linq/ODataController 中使用全文搜索

c# - 如何在不使用 EF 的情况下使用 Breeze 保存更改?

没有服务器元数据的 Breezejs

javascript - 有什么方法可以形成像 $filter=Emails/any(s : s eq 'somestring' ) using Breeze library? 这样的 Odata 过滤器

c# - OAuth2.0如何与OData Client Code Generator集成?

entity-framework-4 - 不使用 Entity Framework 的 WCF 数据服务

odata - OData select 语句中的别名

javascript - NormalizeTypeName 未定义

javascript - Breeze.js - 尝试使用 "any"运算符时出错 - 错误 : Unable to get value of the property 'isAnonymous' : object is null or undefined