2013-10-02 51 views
0

具有高速缓存的实体,该实体已的前20名。 现在,用户动作可以更新服务器上的排名前20位的形式相关的实体,我这样想重新下载整个实体。服务器发送正确的数据与前20名,但在微风,我结束了前40名......我不知道如何避免这种行为。微风:如何防止合并发生

谢谢你的提示

更新:我不使用的OData的WebAPI和IQueryable的,因为它提供了太多的权力,以客户为我的应用程序。所以我不想使用EntityQuery.fromEntityKey,这似乎是我想要的。我宁愿继续使用“正常”查询,我添加了一个参数。

更新2:为了更加清晰地说明为什么我想要防止合并,当我重新计算前20位时,我删除数据库中的所有相关条目并重新创建它们,以便它们具有新的Id。所以我现在正在考虑更新,这可能实际上解决了我的问题,但是我仍然想知道是否可以防止合并。

回答

0

我不确定什么是你的问题,但是如果你想要在实体查询上得到不同的结果,你可以通过创建2个不同的控制器使用不同的操作名称,或者只是使用不同的参数 - 重载的方法。然后在你的datacontext中你可以有2个不同的查询。

您使用的查询.withParameters()礼来调用带参数的控制器方法。

然后在控制器方法可以查询和使用LINQ过滤器,在任何你想要的方式。这样,您可以根据您选择调用的查询/控制器获得不同的结果。

文档:http://www.breezejs.com/documentation/querying-depth

1

微风的EntityManager缓存由主键的实体。所以大概你的第二个查询正在为每个查询返回一组全新的实体。如果是这种情况,并且你真的只想要“最新”20,最简单的解决方法就是在每次查询之前简单地清空此实体类型的EntityManager缓存。喜欢的东西:

var entities = myEntityManager.getEntities(myEntityType); 
entities.forEach(function(e) { 
    myEntityManager.detachEntity(e); 
    // or 
    // e.entityAspect.setDetached(); 
});