微风:跟踪新对象的变化

时间:2014-04-28 22:08:28

标签: breeze single-page-application entitymanager self-tracking-entities

我可以创建一个实体对象,设置一些默认值并将其添加到管理器中。现在我想使用manager.hasChanges()跟踪对它的更改。出于某种原因,这总是返回true。跟踪新创建的不在数据库中的实体时,我是否应该检查其他内容?

2 个答案:

答案 0 :(得分:2)

EntityManager将EntityState.Added的实体视为“已更改”实体。这就是为什么HasChanges将永远返回true。

在这种情况下,您应该收听EntityManager.entityChanged事件以跟踪更改。

请参阅http://www.breezejs.com/sites/all/apidocs/classes/EntityManager.html#event_entityChanged

答案 1 :(得分:1)

只要您将其“添加”到EntityManager,根据定义,它就会发生变化,因为它处于“已添加”状态。轻松'hasChanges'意味着需要保存它,因为它与持久性服务提供的内容“不同”(在这种情况下,实体尚未“保存”)。

您可以做的是将您的实体“附加”到处于“未更改”状态的EntityManager。

myEntityManager.attachEntity(newEntity, breeze.EntityState.Unchanged);

在这种情况下,您所做的任何更改都将按您的方式工作,但是......

Breeze现在会认为您新添加的实体已经被保留,如果您尝试保存它,那么保存将失败,因为breeze将尝试“修改”持久化实体而不是创建新实体。

如果您确实想要完成请求,则需要使用“附加”,但也要跟踪这些实体,并在尝试保存之前将其标记为“已添加”。

相关问题