0

我正在尝试在字符串列上运行带有过滤器的查询,但在运行时一些过滤器值(例如“PO Box 27”)会导致查询失败。尝试使用我的查询过滤失败并显示错误消息:“字符串 'PO Box 27' 不是有效的 TimeSpan 值。”

代码: var crmAccountsQuery = EntityQuery .from('crmAccountEFs') .where(breeze.Predicate.create('address1_Line1', 'eq', 'abc'));

return manager.executeQuery(crmAccountsQuery)
    .then(function (data) {
        crmAccountsObservable(data.results);
        return;
    })
    .fail(queryFailed);

客户端上的微风.js 构建一个 url,如:

http://localhost:49800/breeze/BreezeDb/crmAccountEFs?$filter=(Address1_Line1%20eq%20time'PO%20Box%2027')

时间输入完全错误。

编辑:相关:BreezeJS malformed OData query Url when using "startsWith"

4

1 回答 1

0

为了他人的利益,我找到了意想不到的答案。原来'from' entityType 的情况是错误的(CrmAccountEFs),但没有引发错误。服务器处理大小写更改,客户端默默地退回到匿名类型(因为代码试图处理投影查询)。这是在 EntityQuery._getFromEntityType() 中。

结果是在运行 Query 时,资源名称未解析为 entityType。相反,它被赋予了一个匿名 entityType,这意味着必须从它的值中推断出列的类型。在我的例子中,一个前导的“P”意味着它被输入为时间。但是,当服务器读取生成的 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 期望一个有效的 entityType 的 resourceName,并且仅在设置显式参数时才允许使用 Anonymous 类型。

于 2013-06-24T09:20:09.060 回答