当使用Breeze和OData并调用entityManager.FetchEntityByKey()时,会发送以下请求:
/odata/Customers?$filter=Id eq 2
我原本预计
/odata/Customers(2)
是否可以使用后者制作Breeze?
更新2013-12-10:
YES!我发现我可以做以下事情(imho FetchEntityByKey应该这样做):
entityManager.executeQuery('Cusotmer(2)') ...
然后发出以下请求:
/odata/Customers(2)
BUT!现在看来Breeze(v1.9.6)无法正确处理结果。返回的结果数组为空。实际上它应该只返回一个项目(实体)而不是一个数组。
链接到UserVoice
答案 0 :(得分:2)
您真的关心Breeze生成的网址是/odata/Customers(2)
还是/odata/Customers?$filter=Id eq 2
?为什么呢?
他们都是合法的OData。 OData服务器很乐意为您提供正确的查询答案。
微风确实偏爱后者。这就是原因。
Customers(2)
语法返回一个对象或null (不是404-unfound)。
Customers?$filter=Id eq 2
过滤器语法始终返回数组。该数组有一个项目或零项目。但是你会得到一个数组。
我们在客户端的一个简化是查询总是返回data.results
数组。我们有一个查询结果API,无论您如何查询,data.results
始终是一个数组。您不必为data.results
测试null。而且你不必记住" 我的查询是返回一个对象还是一个数组?"
这是我们指导的客户端一致性原则。我们不太可能偏离这个原则。
实际上,您可以拦截URL生成并根据需要进行更改。这对你来说是一种锻炼。当然(正如您所发现的),您必须做一些工作才能将结果转换回数组。忽略这一点是我怀疑你试图将Breeze引入其他语法Customers(2)
导致令人困惑的空数组结果的原因。
我们不太可能改变默认行为,除非我们得到一些严重的推迟,并有令人信服的理由支持。