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);

クライアントの Breeze.js は、次のような URL を作成します。

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

時間の入力は完全に間違っています。

編集: 関連: 「startsWith」を使用する場合の BreezeJS の不正な形式の OData クエリ URL

4

1 に答える 1

0

他の人の利益のために、私は予期しない答えを見つけました。「from」entityType のケースが間違っていることがわかりました (CrmAccountEFs) が、エラーは発生しません。サーバーは大文字と小文字の変更を処理し、クライアントは暗黙のうちに匿名型にフォールバックします (コードが射影クエリに対処しようとしているため)。これは 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に有効なentityTypeであるresourceNameを期待させ、明示的なパラメーターが設定されている場合にのみ匿名型を許可することは可能ですか?

于 2013-06-24T09:20:09.060 に答える