Sat*_*ngh 6 azure azure-cosmosdb
我有存储过程,该过程仅基于Etag更新文档。
我已经获取了3种文档,更新了所有3种文档的某些属性。我正在尝试更新存储过程中的所有3个文档。但是在存储过程更新第3个文档之前,另一个用户更新了第3个文档。所以在这种情况下,我确实会出现并发错误。我可以在存储过程中获取文档,但是我不确定必须更新哪个属性,因为我不知道该属性是由我还是由存储过程中的其他用户修改的,因为它只是替换了文档。与文档需要更新的所有地方所使用的存储过程相同,因此我无法对其进行硬编码。
我该如何处理?
在实体框架代码优先方法中,我们确实为SQL 提供了DbUpdateConcurrencyException类,从中我们可以看到哪个属性被修改并采取相应的Action。Cosmos DB中是否提供类似于DbUpdateConcurrencyException的异常类?
我确实读过DocumentDB的第3部分– DocumentDB中的并发和DocumentDB –存储过程中的乐观并发,这两篇文章都告诉我们如何使用Etag处理乐观并发。
小智 1
如果您的存储过程仅存储新文档,则您无法确定哪些属性已更改。
如果您的存储过程同时采用现有文档(例如,ETag 所针对的版本)和新文档来存储,那么您可以进行比较来确定哪些属性已更新。当 ETag 检查失败时,重新获取最新文档并根据需要使用内存差异更新属性。
| 归档时间: |
|
| 查看次数: |
353 次 |
| 最近记录: |