【问题标题】:Breeze: how to prevent merge to happenBreeze:如何防止合并发生
【发布时间】:2013-10-04 02:42:13
【问题描述】:

缓存中有一个实体,该实体具有前 20 个形式的相关实体。 现在用户操作可以更新服务器上的前 20 个,因此我想重新下载整个实体。服务器发送前 20 名的正确数据,但在 Breeze 中,我最终得到前 40 名...而且我不知道如何避免这种行为。

感谢您的提示

更新:我不使用 odata webapi 和 iqueryable,因为它为我的应用程序的客户端提供了太多的功能。所以我不想使用 EntityQuery.fromEntityKey,这似乎可以满足我的要求。我宁愿继续使用“普通”查询,并在其中添加一个参数。

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

【问题讨论】:

    标签: breeze


    【解决方案1】:

    Breeze EntityManager 按主键缓存实体。因此,您的第二个查询可能会在每个查询中返回一组全新的实体。如果是这种情况,并且您真的只想要“最新的”20,那么最简单的解决方法是在每次查询之前简单地清空该实体类型的 EntityManager 缓存。比如:

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

    【讨论】:

      【解决方案2】:

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

      您在查询中使用 .withParameters() 属性来调用带有参数的控制器方法。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多