BreezeJs - 从多设备中并发保存更改

时间:2014-05-05 20:07:36

标签: concurrency breeze durandal device

我正在编写一个可以由同一个用户在许多设备上使用的SPA应用程序。假设有两个实体E1和E2以及两个不同的用户U1和U2在应用程序上使用相同的帐户登录。当U1在E1上添加/修改/删除时,U2也在E2上添加/修改/删除。然后U2保存E2更改,E1在他的设备上保持不变。现在,问题是当U1保存E1更改时,U2保存的E2更改会被U1设备上的初始E2状态覆盖。我的问题是,如果实体在我们的实体上没有变化,我们如何保持Breeze覆盖从另一个设备所做的更改?实际的例子将受到欢迎。感谢。

2 个答案:

答案 0 :(得分:2)

答案取决于您使用的服务器实现是否支持乐观并发的概念。使用Breeze的.NET / Entity Framework / WebApi2服务器支持乐观并发,对于自上次读取以来该实体的并发值发生变化的任何实体,breeze的保存将失败。 Breeze的服务器impl会在每次保存时自动更新此并发值。

因此,在您的示例中,用户U1和U2都将在同一实体E1中读取并发值为“' X'”。当U1尝试保存时,更新检查当前的E1并发值实际上是' X'在允许保存之前继续。在这种情况下,因为U1是第一个,保存成功,E1的并发值自动更新为' X2'。

现在,当U2尝试保存时,保存将失败,因为当前的E1并发值为' X2'与U2的E1副本不匹配,该副本的并发值仍为' X'。当保存失败时,将回滚整个事务,并向客户端报告乐观并发错误。

希望这很清楚。

答案 1 :(得分:-1)

Breeze默认不支持并发保存。如果你想要并发保存启用此选项,同时在breeze中调用saveChanges函数之前调用..

var manager = new breeze.EntityManager({
    dataservice: "api/Todo",
    saveOptions: new breeze.SaveOptions({allowConcurrentSaves: true})
});

http://www.breezejs.com/documentation/concurrent-saves