我正在尝试在具有'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
答案 0 :(得分:1)
EntityQuery.withParameters 方法 NOT 旨在供本地查询使用。 (我们应该更好地记录这一点)。
WithParameters 发送只能在服务器上解释的应用程序域特定参数。与'where','orderBy','take'等不同,没有可以为 withParameters 调用确定的全局解释。它只能在接受参数的服务器端方法的上下文中理解。