我正在尝试使用字符串列上的过滤器运行查询,但在运行时,一些过滤器值(例如“邮政信箱27”)会导致查询失败。尝试使用我的查询进行过滤失败时显示错误消息:“字符串'PO Box 27'不是有效的TimeSpan值。”
代码: var crmAccountsQuery = EntityQuery 。从( 'crmAccountEFs') .where(breeze.Predicate.create('address1_Line1','eq','abc'));
return manager.executeQuery(crmAccountsQuery)
.then(function (data) {
crmAccountsObservable(data.results);
return;
})
.fail(queryFailed);
客户端上的breeze.js构建了一个URL:
http://localhost:49800/breeze/BreezeDb/crmAccountEFs?$filter=(Address1_Line1%20eq%20time'PO%20Box%2027')
输入时间完全错误。
编辑: 与:BreezeJS malformed OData query Url when using "startsWith"
相关答案 0 :(得分:0)
对于其他人的好处,我发现了意想不到的答案。原来'from'entityType的情况是错误的(CrmAccountEFs),但没有引发错误。服务器处理大小写更改,客户端以静默方式回退到匿名类型(因为代码正在尝试处理Projection Queries)。这是在EntityQuery._getFromEntityType()。
中结果是运行Query时,资源名称未解析为entityType。相反,它被赋予一个匿名的entityType,这意味着必须从它的值推断出列的类型。在我的情况下,领先的'P'意味着它被输入为Time。但是当服务器读取生成的url时,它无法尝试将其强制转换为正确的类型。
//var query = breeze.EntityQuery.from("Todos"); //Ok
//wrong case => entityType = Anonymous => column's type inferred from value
var query = breeze.EntityQuery.from("todos"); //Error
http://jsfiddle.net/rockresolve/C4A
Breeze Devs: 这个微妙的错误很难被追踪(并且可能由其他字符串类型推断引发)。 是否可以在默认情况下使EntityQuery期望resourceName是有效的entityType,并且在设置显式参数时仅允许Anonymous类型。