首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FetchEntityByKey /OData调用确实使用了过滤器(EntitySetController.GetEntityByKey未使用)

FetchEntityByKey /OData调用确实使用了过滤器(EntitySetController.GetEntityByKey未使用)
EN

Stack Overflow用户
提问于 2013-12-07 10:41:43
回答 1查看 364关注 0票数 3

当与OData一起使用Breeze并调用entityManager.FetchEntityByKey()时,将发送以下请求:

代码语言:javascript
运行
复制
/odata/Customers?$filter=Id eq 2

我本以为

代码语言:javascript
运行
复制
/odata/Customers(2)

是否有可能用后一种方法来制造微风呢?

更新2013年-12-10:

是!我已经知道我可以做以下工作(imho FetchEntityByKey应该这样做):

代码语言:javascript
运行
复制
entityManager.executeQuery('Cusotmer(2)') ...

然后发出下列请求:

代码语言:javascript
运行
复制
/odata/Customers(2)

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

链接到UserVoice

我创建了一个UserVoice反馈

EN

回答 1

Stack Overflow用户

发布于 2013-12-14 08:51:17

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

它们都是合法的OData。OData服务器将很高兴地对这两个查询给出正确的答案。

微风确实偏爱后者。这就是为什么。

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

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

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

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

碰巧,您可以拦截URL生成,如果愿意,可以更改它。这对你来说是个练习。当然(正如您所发现的),您必须做一些工作才能将结果转换为数组。忽略这一点是因为我怀疑您试图将Breeze骗到其他语法Customers(2)导致了令人困惑的空数组结果。

我们不太可能改变默认的行为,除非我们得到一些强有力的理由支持的严重倒退。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20440358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档