【发布时间】:2014-05-24 13:25:59
【问题描述】:
我正在使用“DeletedDate”属性软删除实体。这些实体从服务器返回,因此可以从另一个用户的 Breeze 缓存中删除。分离软删除实体的正确方法是什么?
我尝试过的一种方法是监视实体更改,然后在它具有 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 Angular 示例来演示该问题。我添加了一个与 TodoItem 具有多对多关系的 Category 实体。实体 TodoItemCategory 充当实体之间的映射表。每个实体的 DeletedDate 属性表示软删除。
在示例中,“基本需求”类别被软删除。所有用户都会收到这个实体,以防它在他们的缓存中并且需要清理。当我在 entityChanged 事件期间分离它时,它的一些关系不会被删除。正确的行为是删除关系。
在传递查询结果之前,如何检测软删除的实体并使其正确分离?
【问题讨论】:
标签: breeze