如何从breeze缓存中删除软删除的实体?

如何从breeze缓存中删除软删除的实体?,breeze,Breeze,我正在使用DeletedDate属性软删除实体。这些实体从服务器返回,以便可以从其他用户的缓存中删除。分离软删除实体的正确方法是什么 我尝试过的一种方法是监视实体更改,如果它有DeletedDate,则将其分离: // Mark soft-deleted entities as detached manager.entityChanged.subscribe(function (args) { if (args && args.entity && args.

我正在使用DeletedDate属性软删除实体。这些实体从服务器返回,以便可以从其他用户的缓存中删除。分离软删除实体的正确方法是什么

我尝试过的一种方法是监视实体更改,如果它有DeletedDate,则将其分离:

// Mark soft-deleted entities as detached
manager.entityChanged.subscribe(function (args) {
   if (args && args.entity && args.entity.DeletedDate) {
       args.entity.entityAspect.setDetached();
   }
});
这种方法的问题是,当关系仍然由Breeze构建时,就会发生这种情况,因此分离的实体可能仍然与其他对象关联。例如,detachedEntity.Relationship1=null表示正确的行为,但detachedEntity.Relationship2!=null错误行为和detachedEntity.Relationship2.RelatedEntities包含detachedEntity错误行为

我正在寻找一种解决方案,在传递结果之前,我可以正确地分离这些实体并将其从关系中删除。有什么想法吗

例如:

我修改了Todo角度示例以演示该问题。我添加了一个与TodoItem具有多对多关系的类别实体。实体TodoItemCategory充当实体之间的映射表。每个实体上的DeletedDate属性表示软删除

在本例中,基本需求类别被软删除。所有用户都将收到此实体,以防它位于其缓存中并需要清理。当我在entityChanged事件期间分离它时,它的一些关系不会被删除。正确的行为是删除关系

在传递查询结果之前,如何检测软删除实体并将其正确分离


从我过去收集到的信息来看,我相信这绝不是你真正想要去的方向

如果我是您,我的方向是设置deletedDate属性,并在存储集成功时将其设置为deleted并接受客户端更改,类似这样的操作-

function deleteMe(me) {
    // Save changes only to the me entity
    manager.saveChanges([me]).then(success);

    function success(data) {
        me.entityAspect.setDeleted();
        me.entityAspect.acceptChanges();
    }
}

这应将实体设置为已删除,并删除它及其与其他实体的关系,然后acceptChanges应将其与管理器分离。

我正在服务器端处理保存案例,方法是覆盖SaveChanges,然后分离软删除的实体,但删除的实体不需要从另一个用户的缓存中删除。我看不到你的问题中有任何关于其他用户缓存的内容?编辑第二句以澄清。