我正在努力解决 saveChanges 方法的问题。
似乎 saveChanges 使实体的状态保持原样,因此在服务器上所做的更改不会反映在客户端上。我尝试了两种合并策略,结果是一样的。
我确实像这样初始化管理器:
var manager = new breeze.EntityManager({ serviceName: serviceUrl });
然后我得到了我需要在并行调用中使用的所有实体。
manager.fetchMetadata()
.then(function() {
store.registerEntityTypeCtor("GameGroup", GameGroup);
store.registerEntityTypeCtor("Game", Game);
store.registerEntityTypeCtor("LimitGroup", LimitGroup, LimitGroupInitializer);
store.registerEntityTypeCtor("Limit", Limit, LimitInitializer);
addValidators();
subscribeToStateChanges();
})
.then(function() {
return Q.all([
getEntitiesByQuery(gamesQuery, model.games),
getEntitiesByQuery(gameGroupsQuery, model.gameGroups),
getEntitiesByQuery(limitsQuery, model.limits),
getEntitiesByQuery(limitGroupsQuery, model.limitGroups)]);
})
.then(function() {
handlers.onSuccess();
})
.fail(function () {
handlers.onFail();
});
function getEntitiesByQuery(query, modelProperty) {
manager.executeQuery(query)
.then(function (data) {
modelProperty(data.results);
});
}
但是,假设我们要更改某个实体的属性:这是一个控制台日志:
manager.getEntities('LimitGroup')[0].entityAspect.entityState.name
"Unchanged"
manager.getEntities('LimitGroup')[0].Name('SomeName')
LimitGroup
manager.getEntities('LimitGroup')[0].entityAspect.entityState.name
"Modified"
manager.hasChanges()
true
manager.saveChanges().done();
undefined
manager.getEntities('LimitGroup')[0].entityAspect.entityState.name
"Modified"
如您所见,调用 saveChanges 后状态仍为“已修改”。我对名称所做的更改已保存到数据库中,除此之外的所有内容似乎都可以正常工作。同样的事情发生在“添加”的实体上,但是,如果我在某个实体上调用 setDeleted 方法,它会在调用后立即设置为“分离”,并且在管理器的缓存中找不到。
我查看了一些微风示例,它们没有相同的问题,可能是什么问题?
谢谢!
更新#1
以下是调用 saveChanges 的方式:
self.showBusy();
manager.saveChanges()
.then(function (data) {
self.hideBusy();
console.log(manager.getEntities('LimitGroup')[0].entityAspect.entityState.name);
})
.fail(saveFailed);
同样,实体状态显示为“已修改”
更新#2
所以我用 done() 调用替换了 then(),结果是一样的。
manager.saveChanges()
.done(function(data) {
self.hideBusy();
console.log(manager.getEntities('LimitGroup')[0].entityAspect.entityState.name);
});