我有一个使用微风的网络应用程序。我做部分加载实体,这意味着在一个加载中我填充实体的某些属性,在另一个加载我填充其他属性。示例:这将是我的权利定义(伪代码,javascript):
myEntity = {
property1: '',
property2: '',
property3: '',
property4: '',
}
假设我做了第一次加载,我填充了property1和property2。然后我手动更改property1的值,以便我的实体包含在挂起的更改中。 我还没有保存更改。 现在我进行第二次加载(MergeStrategy设置为OverwriteChanges,否则,因为我的实体有挂起的更改,其属性将不会更新)。在第二次加载操作结束时,property3和4被填充,我仍然在实体上手动修改了property1的值,但重点是挂起的更改丢失(正确,根据Breeze文档)但我仍然我希望将property1设置为挂起更改(以便能够保存),因为我还没有保存它。这是可以实现的吗?
答案 0 :(得分:2)
你想要的是什么,但你需要为它编写一些代码。默认情况下,breeze要么更新整个实体(MergeStrategy.OverwriteChanges),要么跳过整个实体(如果以前已经修改过的任何方式)(MergeStrategy.PreserveChanges)。
听起来好像你想要某种形式的实体部分更新。为了实现这一目标,您需要自己进行合并,但是微风确实为您提供了足够的“绳索”。执行此任务。
希望这会有所帮助。
答案 1 :(得分:0)
我很快就尝试了Jay的方法,除了创建另一个entityManager的复杂性(使用相同的metadataStore,否则我无法将实体从一个管理器附加到另一个),前提是我有一个' metadataByHand& #39;使用自定义DataService(自定义适配器)进行存储,将它们放在一起非常复杂,我看到将第二个加载的属性合并到已经修改过的'实体我无法检索已在该子集中加载了哪些属性(我们有多个子集),因此我认为这种方法不适合我。因此,我决定在每次加载之前自动执行saveChanges(),并且只有在保存完成后才加载第二部分。在这种情况下,没有机会进行等待更改'被取消了。