【问题标题】:Can I delete an entity that is not in cache?我可以删除不在缓存中的实体吗?
【发布时间】:2026-01-11 22:40:01
【问题描述】:

我想从数据库中删除一条尚未从微风查询中检索到的记录。该实体尚未被检索,因此它不在缓存中,但我从另一个操作中知道记录的 KEY。这是我尝试过的:

从经理创建一个新实体:

manager.createEntity(entityNames.book);

设置 ID:

bookToDelete().bookID(1);  // bookToDelete is a ko observable from step 1

更新状态:

bookToDelete().entityAspect.setDeleted(); 

当我保存更改时,此事务不包含在 JSON 中

【问题讨论】:

    标签: entity breeze delete-record


    【解决方案1】:

    你几乎拥有它。对“已添加”实体调用 entityAspect.setDeleted 会将其直接移至“已分离”状态,这实际上会将其从 EntityManager 中删除,因此无法保存。这是故意的。它处理您创建实体然后将其删除的情况。在这种情况下,没有要保存的实体。

    因此,在您的情况下,您必须在调用 entityAspect.setDeleted 之前将实体设为“已修改”或“未更改”。您可以在调用 entityAspect.setDeleted 之前调用 entityAspect.setUnchangedentityAspect.setModified 或调用 entityAspect.acceptChanges .

    请注意,您还必须确保“克隆”实体通过验证,如果您在实体上有并发字段,您还需要适当地设置它。

    12 月 7 日更新

    您可以在一个步骤中创建处于标记为删除状态的图书实体,如下所示:

    var book = manager.createEntity(entityNames.book,
                { BookID: 1 },                  // use initializer to set the key
                  breeze.EntityState.Deleted);  // creates the entity in the Deleted state
    

    确保使用实体在服务器上通过验证和乐观并发检查所需的所有其他属性对其进行初始化。

    如果您没有这些检查,也没问题。如果您确实进行了此类检查,则不确定如何在不查询服务器的情况下获得这些值。

    【讨论】:

    • 这些是我对微风还不熟悉的两个术语:克隆实体和并发字段。微风网站上是否有更详细的讨论?谢谢
    • 并发是,我认为,“克隆”只是我对你正在尝试的术语。
    【解决方案2】:

    知道了。仍处于添加状态时无法删除实体。我先设置修改。然后设置删除。没有看到任何副作用。

    【讨论】: