如何从breeze缓存中删除软删除的实体?
我正在使用DeletedDate属性软删除实体。这些实体从服务器返回,以便可以从其他用户的缓存中删除。分离软删除实体的正确方法是什么 我尝试过的一种方法是监视实体更改,如果它有DeletedDate,则将其分离:如何从breeze缓存中删除软删除的实体?,breeze,Breeze,我正在使用DeletedDate属性软删除实体。这些实体从服务器返回,以便可以从其他用户的缓存中删除。分离软删除实体的正确方法是什么 我尝试过的一种方法是监视实体更改,如果它有DeletedDate,则将其分离: // Mark soft-deleted entities as detached manager.entityChanged.subscribe(function (args) { if (args && args.entity && args.
// 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,然后分离软删除的实体,但删除的实体不需要从另一个用户的缓存中删除。我看不到你的问题中有任何关于其他用户缓存的内容?编辑第二句以澄清。