BreezeJS查询筛选器字符串不是有效的TimeSpan值

BreezeJS query filter string is not a valid TimeSpan value

本文关键字:有效 TimeSpan 查询 筛选 字符串 BreezeJS      更新时间:2023-09-26

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

代码:var crmAccountsQuery=实体查询.来自('crmAccountEFs')where(breeze.Predicate.create('address1_Line1','eq','abc'));

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

客户端上的bread.js构建了一个类似于的url

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

时间输入完全错误。

编辑:与:BreezeJS在使用";startsWith";

为了他人的利益,我找到了意想不到的答案。事实证明"from"实体类型的大小写错误(CrmAccountEF),但没有引发错误。服务器处理大小写更改,客户端静默地返回到匿名类型(因为代码试图处理Projection Queries)。这在EntityQuery中_getFromEntityType()。

结果是,当运行查询时,资源名称没有解析为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

微风发展:这个微妙的错误很难追踪(可能是由其他字符串类型推断引起的)。是否可以在默认情况下让EntityQuery期望resourceName是有效的entityType,并且仅在设置显式参数时允许Anonymous类型。