在保存这些数据时,Breeze 并没有查看服务器端的数据发生了什么。Breeze 团队说你必须重新查询才能有更新的数据。可以考虑在此保存期间同步完成的操作,例如 sql 触发器(expl。插入后),因为这些操作可以在保存期间转换实体,因此它们发生在客户端:这对于不是由 Breeze 生成的新键(如多部分键)很有用. 我很难解决这个问题。帮助?
更新 1: 如果这是 Breeze 的原理,它可能是一个错误。
1)触发器(在服务器端)是实体(表)的一部分
2) 使用的框架:
- 服务器端框架:.NET Framework 4.5
- 客户端框架:Breeze 1.3.5
- 查看框架:淘汰赛2.2.1
3) saveChanges 的结果场景:
function saveTousRecos() {
return manager.saveChanges()
.then(success)
.fail(fail);
function success(saveResult) {
/* do your post-save work here */
axi = saveResult.entities[0].jobtab();
// axi is an identity key generated at server and sent back to client by Breeze
// result : Breeze value = (195), the same as server-side (195)
ara = saveResult.entities[0].seqtab();
// ara is a property value inserted by sql FOR INSERT trigger,
// result : Breeze value = (NULL), server-side has (13)
logger.log("Saving succeded... ");
}
function fail(error) {
logger.log("Saving failed: " + error.message);
}
}
PS:SQL 触发器插入的所有值根本不可见,除非您从服务器而不是从缓存中重新调用实体;似乎是一种解决方法,而不是我想的解决方案。
更新 2: 我认为 Breeze 将我的返回实体视为OData。
1)从我的微风API控制器我使用这个:
return _contextProvider.Context.clients.Where(uc => uc.refclie == rqnoclie);
2) Breeze 说:使用OData,服务器端计算字段的值的任何更改在更新后将在 Breeze 中不可用。如果您需要刷新这些值,您必须重新查询...
3)所以从现在开始,我的解决方案是请求(不是好消息)来获取我的计算或触发结果。希望 BeforeSaveEntity 拦截器的未来能够解决这个问题。或者我怎样才能获得 Breeze 的纯实体(不是 OData,而是计算或触发的服务器端)?有没有办法摆脱这个麻烦?