使用withParameters时,executeQueryLocally不能正常工作

时间:2013-06-20 11:22:56

标签: caching breeze

我正在尝试在具有'withParamters'的查询中使用executeQueryLocally,但是即使在'withParameters'中使用新值,我似乎也获得了本地缓存的数据。好像'executeQueryLocally'忽略'withParameters'中的值。

这是客户端的代码:

var query = EntityQuery.from('ProductsFilteredByCategory')
            .withParameters({ categoryId: categoryId })
            .select("productId,name,desc,shopPrice,webPrice")
            .orderBy('name');

var p = manager.executeQueryLocally(query);
if (p.length > 5) {
    productsObservable(p);
    return Q.resolve();
}

这是服务器端'ProductsFilteredByCategory'的代码:

    [HttpGet]
    public IQueryable<Product> ProductsFilteredByCategory(int categoryId)
    {
        Category category = _contextProvider.Context.Categories.Include("Products").Include("SubCategories").First(c => c.CategoryId == categoryId);
        var prods = from p in category.Products select p;
        category.SubCategories.ForEach(sc => prods = prods.Concat(_contextProvider.Context.Categories.Include("Products").First(c => c.CategoryId == sc.CategoryId).Products));
        return prods.AsQueryable();
     }

在使用'p.length&gt;检索数据后,会发生什么? 5'为真,在每个后续调用中'p.length&gt;即使'categoryId'不同,5'仍然是正确的,因此绑定到observable的数据被加载一次而且永远不会改变。

感谢您的帮助!

Elior

1 个答案:

答案 0 :(得分:1)

EntityQuery.withParameters 方法 NOT 旨在供本地查询使用。 (我们应该更好地记录这一点)。

WithParameters 发送只能在服务器上解释的应用程序域特定参数。与'where','orderBy','take'等不同,没有可以为 withParameters 调用确定的全局解释。它只能在接受参数的服务器端方法的上下文中理解。