我可以创建一个实体对象,设置一些默认值并将其添加到管理器中。现在我想使用manager.hasChanges()
跟踪对它的更改。出于某种原因,这总是返回true。跟踪新创建的不在数据库中的实体时,我是否应该检查其他内容?
答案 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将尝试“修改”持久化实体而不是创建新实体。
如果您确实想要完成请求,则需要使用“附加”,但也要跟踪这些实体,并在尝试保存之前将其标记为“已添加”。