gpt4 book ai didi

javascript - Breeze 合并策略 : overwrite properties, 保留更改

转载 作者:行者123 更新时间:2023-11-29 21:57:54 24 4
gpt4 key购买 nike

我有一个使用 breeze 的网络应用程序。我对实体进行部分加载,这意味着在一次加载中我填充实体的某些属性,在另一次加载中我填充其他属性。示例:这将是我的实体定义(伪代码,javascript):

myEntity = {
property1: '',
property2: '',

property3: '',
property4: '',
}

假设我进行了第一次加载并填充了 property1 和 property2。然后我手动更改 property1 的值,以便我的实体包含在待定更改中。我还没有保存更改。现在我进行第二次加载(将 MergeStrategy 设置为 OverwriteChanges,否则,由于我的实体有待定更改,因此不会更新其属性)。在第二次加载操作结束时,property3 和 4 被填充,我仍然在实体上手动修改了 property1 的值,但关键是挂起的更改丢失了(正确,根据 Breeze 文档)但我仍然想将 property1 设置为待定更改(以便能够保存它),因为我还没有保存它。这是否可以以某种方式实现?

最佳答案

你想要的可以实现,但是你需要为它写一些代码。默认情况下,breeze 要么更新整个实体 (MergeStrategy.OverwriteChanges),要么跳过之前以任何方式修改过的整个实体 (MergeStrategy.PreserveChanges)。

听起来好像您想要对实体进行某种形式的部分更新。为了完成此任务,您需要自己执行合并,但是 Breeze 确实为您提供了足够的“绳索”来执行此任务。

  • 在新的空“临时”EntityManager 中执行您的查询。
  • 对于“临时”EntityManager 中查询返回的每个实体。
    • 在“真正的”EntityManager 中找到对应的实体。 (为此您可以使用 EntityManager.getEntityByKey 方法。)
    • 如果找到实体,则使用“找到”实体中的原始值映射 (EntityAspect.originalValues) 来确定每个属性是否存在原始值并更新(或不更新)找到的基于此信息的实体。
    • 如果未找到该实体,则将其与“临时”EntityManager (EntityManager.detachEntity) 分离,并将其附加到“真实”EntityManager (EntityManager.attachEntity ).

希望这对您有所帮助。

关于javascript - Breeze 合并策略 : overwrite properties, 保留更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25430361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com