将对象更新为Azure表存储 - 有没有办法获得新的时间戳?

Stu*_*art 9 azure azure-storage azure-table-storage

我正在使用StorageClient库更新AzureTableStorage中的对象

    context.UpdateObject(obj);
    context.SaveChangesWithRetries(obj);
Run Code Online (Sandbox Code Playgroud)

当我这样做时,有没有办法得到新的时间戳,obj而不向服务器发出另一个请求?

谢谢

斯图尔特

sev*_*tov 13

MSDN页面对Timestamp字段的使用有一些指导:

时间戳属性

Timestamp属性是在服务器端维护的DateTime值,用于记录上次修改实体的时间.Table服务在内部使用Timestamp属性来提供乐观并发.您应该将此属性视为不透明:它不应被读取,也不应在插入或更新操作上设置(该值将被忽略).

这意味着它实际上是表存储的实现细节,您不应该依赖Timestamp字段来表示上次更新的时间戳.

如果您想要一个保证表示上次写入时间的字段,请创建新字段并在每次更新操作时设置它.我理解这是维护字段的更多工作(以及更多存储空间),但这实际上会自动解决您的问题 - 如何获取时间戳,因为您在调用context.UpdateObject()时已经知道它.


edy*_*mtt 13

为了补充Seva Titov的回答:报道的摘录至少有效期至2013年5月,但截至2013年11月它已经改变(重点补充):

Timestamp属性是在服务器端维护的DateTime值,用于记录上次修改实体的时间.Table服务在内部使用Timestamp属性来提供乐观并发.Timestamp的值是单调递增的值,这意味着每次修改实体时,该实体的Timestamp值都会增加.不应在插入或更新操作上设置此属性(将忽略该值).

现在,该Timestamp属性不再被视为不透明,并且记录了每次编辑后其值增加 - 这表明Timestamp现在可以用于跟踪后续更新(至少关于单个实体).

尽管如此,截至2013年11月,在更新实体时仍需要另一个表存储请求来获取新的时间戳(请参阅更新实体 REST方法的文档).只有在插入实体时,REST服务才会返回带有时间戳的整个实体(但我不记得它是否由StorageClient/Windows Azure存储库公开).