クライアントで次のクエリを使用しています。
var query = breeze.EntityQuery.from("AllCustomers").where("CustomerId,"==",criteriaValue);
return this.manager.executeQuery(query)
次の URL になります。
/breeze/myAPI/AllCustomers?$filter=CustomerId%20eq%2012
データベースでフィルタリングが実行されていないことに気付きました (データベースによって実行される SQL に WHERE ステートメントがありません)。この理由はBreeze.WebApi.QueryHelper.WrapResult
であり、これが を呼び出しているのではないかと思いますEnumerable.ToList
。後で IQueriable をリストに変換し、デフォルトの Microsoft OData 実装でフィルタリングされる前にクエリの実行を強制します。
// if a select or expand was encountered we need to
// execute the DbQueries here, so that any exceptions thrown can be properly returned.
// if we wait to have the query executed within the serializer, some exceptions will not
// serialize properly.
queryResult = Enumerable.ToList((dynamic)queryResult);
queryResult = PostExecuteQuery((IEnumerable)queryResult);
これは Breeze のバグですか、それとも何か間違っていますか?
エンティティ フレームワークに Oracle ODP.NET プロバイダーを使用しています。
更新:私は WebAPI を使用しており、コントローラー メソッドは非常に単純です。
[BreezeController]
public class MyController : ApiController
{
[HttpGet]
public IQueryable<Customer> AllCustomers()
{
return _contextProvider.Context.Customers;
}