BreezeJS查询过滤器字符串不是有效的TimeSpan值

时间:2013-06-24 09:20:09

标签: javascript breeze

我正在尝试使用字符串列上的过滤器运行查询,但在运行时,一些过滤器值(例如“邮政信箱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"

相关

1 个答案:

答案 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类型。