gpt4 book ai didi

javascript - 轻松解决冲突

转载 作者:行者123 更新时间:2023-11-28 00:22:54 25 4
gpt4 key购买 nike

如何在breeze.sharp或breeze.js中实现冲突解决?它与新发布的Azure“AsyncTable”冲突处理相比如何?

场景是这样的:之前从服务器获取的实体(例如 Person)被保存在 Breeze 缓存中(将数据保存在缓存中的原因是为了让用户可以在应用程序上工作)当移动设备与互联网断开连接时)。当移动设备离线时,用户编辑有关人员的一些详细信息(例如编辑姓氏)。与此同时,其他人编辑了同一个人的姓氏,并且该姓氏已成功保存回 Azure(或中央 MS SQL)数据库。然后移动设备再次上线并将其更新(到目前为止一直存储在本地缓存中)发送到服务器。

我的问题是,如何才能/应该轻松地完成这两个相互冲突的更新之间选择“获胜者”的可能性?决定获胜者的机制不是这里的问题。我只是想知道如何最好地获得做出该决定的机会 - 然后如何让获胜者版本的姓氏保留在失败者一方(即移动设备或服务器数据库)。

我设法找到的最接近的答案是在“保存更改”页面上的 Breeze 文档中,其中显示“此页面尚未准备好发布。它将涵盖:...并发性和数据属性。并发模式”。

我不确定这个要求是否可以通过乐观并发来正确实现,或者是否可以通过更类似于Azure的方法来实现这一点(实体上的版本字段和其他我不知道的神奇冲突解决和同步逻辑)需要在 Breeze 上完成这项工作吗?

最佳答案

I'd just like to know how best to get the opportunity to make that decision - and then how to let the winner's version of the surname be persisted on the loser's side (i.e. the mobile device or the server DB).

我正在使用带有 Entity Framework /MS SQL 后端的 Breeze 。以下是我如何识别客户端上的并发异常:

export function isConcurrencyException(reason: any): boolean {
return reason.message && /Store update, insert, or delete statement affected an unexpected number of rows/.test(reason.message);
}

entityManager.saveChanges()
.fail(reason => {
if (isConcurrencyException(reason)) {
// ... concurrency exception handling logic ...
}
// detect other failure reasons (connection issue, server-side validation error, etc)
});

就识别并发异常后该怎么做而言,这很困难,每个应用程序都是不同的。有多种情况需要考虑,包括非冲突的属性编辑、冲突的属性编辑以及其他用户删除了您尝试保存的实体的情况。 Breeze 的MergeStrategy可能会在您的解决方案中发挥作用。

关于javascript - 轻松解决冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29811950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com